Что может быть причиной ошибки «Не удалось получить свойство VLookup класса WorksheetFunction»? - PullRequest
1 голос
/ 06 июля 2019
mySValue = InputBox("Enter the no. of rows to be considered")
    Set myrange = Worksheets("UniqueSupNames").Range("A:B")

    For counterSVar = 3 To mySValue
        SupName = Range("A" & counterSVar)
        SupId = Application.WorksheetFunction.VLookup(SupName, Range("myrange"), 2, False)
        Range("K" & counterSVar).Value = SupId
    Next counterSVar

Выше мой код. Пожалуйста, предложите решение. К вашему сведению - я создал рабочий лист «UniqueSupNames» (в той же книге), который содержит два столбца (A & B), содержащих соответственно имя и идентификатор поставщика.

Ответы [ 2 ]

2 голосов
/ 06 июля 2019

С 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
1 голос
/ 06 июля 2019

myrange уже является диапазоном, поэтому диапазон («myrange») может быть, где ваша проблема.Попробуйте это -

For counterSVar = 3 To mySValue
    SupName = Range("A" & counterSVar)
    SupId = Application.WorksheetFunction.VLookup(SupName, myrange, 2, False)
    Range("K" & counterSVar).Value = SupId
Next counterSVar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...