none
Metodo Find - Retornando erro RRS feed

  • Pergunta

  • Boa noite,

    Estou com um problema interessante, fiz diversas pesquisas e não encontrei erro na declaração do metodo Find, trabalhando com um range de celulas. O codigo que está retornando erro segue abaixo e logo após o erro propriamente dito:

    Private Sub Pesquisa()
        Dim Celula As Range
        
        'On Error Resume Next
        
        With Plan1.Range("A:A")
            Set Celula = .Find(What:=1, LookIn:=xlValue, LookAt:=xlWhole)
        End With
        
        Debug.Print Celula.Value
    End Sub

    O erro:

    Erro em tempo de execução '9':

    Subscrito fora do intervalo.

    Alguem tem alguma idéia do que está acontecendo?

    Abrç

    segunda-feira, 13 de maio de 2013 00:49

Respostas

  • Você escreveu errada a enumeração do parâmetro LookIn do método Find. Faltou um s em xlValues, como mostrado abaixo:

    Set Celula = .Find(What:=1, LookIn:=xlValues, LookAt:=xlWhole)

    Além disso, mesmo com a sintaxe do método correta, se não for encontrado algum registro o objeto Celula terá o valor Nothing atribuído à ele, e então um erro será gerado se você tentar ler alguma propriedade dele. Minha sugestão para melhorar o código é:

    Private Sub Pesquisa()
        Dim Celula As Range
        
        With Plan1.Range("A:A")
            Set Celula = .Find(What:=1, LookIn:=xlValues, LookAt:=xlWhole)
        End With
        
        If Not Celula Is Nothing Then
            Debug.Print Celula.Value
        Else
            Debug.Print "(não foi encontrada nenhuma ocorrência)"
        End If
    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    • Marcado como Resposta Anderson Fios quarta-feira, 15 de maio de 2013 15:23
    segunda-feira, 13 de maio de 2013 22:06
    Moderador

Todas as Respostas

  • Você escreveu errada a enumeração do parâmetro LookIn do método Find. Faltou um s em xlValues, como mostrado abaixo:

    Set Celula = .Find(What:=1, LookIn:=xlValues, LookAt:=xlWhole)

    Além disso, mesmo com a sintaxe do método correta, se não for encontrado algum registro o objeto Celula terá o valor Nothing atribuído à ele, e então um erro será gerado se você tentar ler alguma propriedade dele. Minha sugestão para melhorar o código é:

    Private Sub Pesquisa()
        Dim Celula As Range
        
        With Plan1.Range("A:A")
            Set Celula = .Find(What:=1, LookIn:=xlValues, LookAt:=xlWhole)
        End With
        
        If Not Celula Is Nothing Then
            Debug.Print Celula.Value
        Else
            Debug.Print "(não foi encontrada nenhuma ocorrência)"
        End If
    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    • Marcado como Resposta Anderson Fios quarta-feira, 15 de maio de 2013 15:23
    segunda-feira, 13 de maio de 2013 22:06
    Moderador
  • Boa tarde, Felipe

    Deu certinho aqui, muito obrigado.

    Abrç

    quarta-feira, 15 de maio de 2013 15:25