С Application.WorksheetFunction.VLookup
вы получите ошибку при отсутствии совпадения. Таким образом, когда ошибка не обрабатывается, как в вашем случае, вы получите ошибку Unable to get the VLookup property of the WorksheetFunction class
. Однако, если вы используете Application.VLookup
вместо этого, вы получите неразрывную ошибку . Кроме того, поскольку вы присваиваете диапазон поиска для myrange
, Range("myrange")
следует заменить на myrange
, как уже упоминалось @ARL. Таким образом, вы должны иметь следующее ...
SupID = Application.VLookup(SupName, myRange, 2, False)
Кроме того, вы можете проверить наличие ошибки, используя IsError
...
Dim SupID As Variant
SupID = Application.VLookup(SupName, myRange, 2, False)
If IsError(SupID) Then
MsgBox "No match found!", vbExclamation
Else
MsgBox "SupID: " & SupID, vbInformation
End If
Кроме того, если вы используете Application.InputBox
вместо функции InputBox
, вы можете заставить пользователя вводить число вместо текста и т. Д., И вы можете проверить, отменил ли пользователь. Например ...
Dim mySVAlue As Variant
'prompt the user to enter a number
mySVAlue = Application.InputBox(Prompt:="Enter the no. of rows to be considered", Type:=1)
'if user cancels, exit the sub
If mySVAlue = False Then Exit Sub
Итак, ваш макрос можно переписать следующим образом ...
'Force the explicit declaration of variables
Option Explicit
Sub LookupValues()
'declare the variables
Dim mySVAlue As Variant
Dim myRange As Range
Dim SupName As String
Dim SupID As Variant
Dim counterSVar As Long
'prompt the user to enter a number
mySVAlue = Application.InputBox(Prompt:="Enter the no. of rows to be considered", Type:=1)
'if user cancels, exit the sub
If mySVAlue = False Then Exit Sub
'set the range for the lookup table
Set myRange = Worksheets("UniqueSupNames").Range("A:B")
'lookup the values for the user selected rows
For counterSVar = 3 To mySVAlue
SupName = Range("A" & counterSVar).Value
SupID = Application.VLookup(SupName, myRange, 2, False)
Range("K" & counterSVar).Value = SupID
Next counterSVar
End Sub