Excel VBA: Função para encontrar uma seqüência de caracteres em outra pasta de trabalho

1

Eu estou tentando criar uma função que procura uma seqüência de caracteres (bom) em duas pastas de trabalho diferentes e retorna um valor próximo a essa seqüência de caracteres. Conheço os intervalos nessas pastas de trabalho em que desejo realizar a pesquisa e, em seguida, uso o deslocamento para obter o valor. No entanto, a função retorna um erro #VALUE.

Eu criei funções de pesquisa antes, mas somente dentro da mesma pasta de trabalho, esta é a primeira usando pastas de trabalho diferentes. Talvez você possa me ajudar a encontrar um erro na minha lógica:

Option Explicit

Function findhscode(bom As String)

Dim base1 As Workbook
Dim base2 As Workbook


base1 = Workbooks.Open("path1")
base2 = Workbooks.Open("path2")

If Not base1.Sheets("Sheet1").Range("myRange").Find(bom) Is Nothing Then
    findhscode= base1.Sheets("Sheet1").Range("myRange").Find(bom).Offset(0, -7).value
    Else
        If Not base2.Sheets("Sheet1").Range("myRange").Find(bom) Is Nothing Then
        findhscode = base2.Sheets("Sheet1").Range("myRange").Find(bom).Offset(0, 1).value
            Else
            findhscode= "Please contact Imports for assistance"
        End If
End If

End Function
    
por Ruben 26.02.2014 / 23:42

1 resposta

1

Eu testei o seu código. Para fazê-lo funcionar, você precisa - como semana sugere - definir as variáveis base1 e base2. Caso contrário, você receberá um:

Erro de variável de objeto ou com variável de bloco não definida .

Isso também ajudaria (embora não esteja causando o problema) se você atribuir o tipo de retorno na função. Como não há nenhum tipo de retorno explícito, o padrão é Objeto. A única outra coisa em que posso pensar é se você tem caminhos literais para base1 e base2 ou se está usando variáveis. Se variáveis, remova as aspas.

O seguinte código funcionou para mim (com um par MessageBox é adicionado para fornecer algumas informações de depuração):

Function findhscode(bom As String)

Dim base1 As Workbook
Dim base2 As Workbook


Set base1 = Workbooks.Open("c:\temp\book1.xlsx")
Set base2 = Workbooks.Open("c:\temp\book2.xlsx")

  If Not base1.Sheets("Sheet1").Range("MyRange").Find(bom) Is Nothing Then
    MsgBox "found in base1"
    findhscode = base1.Sheets("Sheet1").Range("MyRange").Find(bom).Offset(0, 1).Value
    Else
        If Not base2.Sheets("Sheet1").Range("MyRange").Find(bom) Is Nothing Then
        MsgBox "found in base2"
        findhscode = base2.Sheets("Sheet1").Range("MyRange").Find(bom).Offset(0, 1).Value
            Else
            MsgBox "not found"
            findhscode = "Please contact Imports for assistance"
        End If
End If 

Eu chamei isso de um simples subbox inputbox:

Sub stringPrompt()
  Dim hs As String
  hs = InputBox("String to search for", vbOKOnly, "Search String")
  Range("A1") = findhscode(hs)
End Sub

Observação: a mensagem de erro #Value geralmente indica um erro de tipo de dados. Você verificou que não está tentando fazer um cálculo matemático com dados de texto?

Além disso (só porque você mencionou que o valor requerido é 'próximo a essa string'). Sua primeira chamada offset é de sete colunas para a esquerda dessa string.

    
por 27.02.2014 / 06:39