Прежде всего, следующие строки некорректны ...
myLookupValue = wb1.Range("B").Value
и
Range("C").Value = myVLookupResult
Вы не указали ссылку на строку. Так должно быть что-то вроде этого ...
myLookupValue = wb1.Range("B2").Value
и
Range("C2").Value = myVLookupResult
Во-вторых, у вас есть On Error Resume Next
в начале вашего кода. Это скроет все ошибки. Если вы собираетесь использовать его, он должен быть обработан правильно. Однако в этом случае нет необходимости использовать его для устранения ошибок, возвращаемых VLookup ().
Вместо использования WorksheetFunction.VLookup()
мы можем использовать Application.VLookup()
. Таким образом, ошибка неразрывная возникает, когда нет совпадений, для которых мы можем проверить, используя IsError()
. Вот пример ...
Dim myVLookupResult As Variant
myVLookupResult = Application.VLookup(myLookupValue, myTableArray, myColumnIndex, False)
If Not IsError(myVLookupResult) Then
Range("C2").Value = myVLookupResult
Else
Range("C2").Value = "N/A"
End If
Обратите внимание, что myVLookupResult объявлен как Variant, поскольку VLookup () может возвращать ошибку в дополнение к строке.
РЕДАКТИРОВАТЬ
Чтобы ввести формулу в диапазон ячеек, а затем преобразовать формулы в значения, попробуйте следующее ...
With Range("C2:C" & myLastRow)
.Formula = "=VLOOKUP(B2," & myTableArray.Address(external:=True) & "," & myColumnIndex & ",0)"
.Value = .Value
End With
Надеюсь, это поможет!