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.