Как использовать VLOOKUP с al oop в Excel VBA для записи данных на несколько листов? - PullRequest
1 голос
/ 12 апреля 2020

Я пытаюсь записать информацию на несколько листов в Excel, используя циклы и VLookup, которые все получают свою информацию из одного и того же входного листа. Он отлично работает для одного листа, но я продолжаю получать сообщение об ошибке «Невозможно получить свойство VLookup класса Function Worksheet» для других листов. Ошибка в переменной Wave (i).

Function Waves(BN() As Integer, Table As Range, Wave() As String, _
               wsName As String, numRows As Integer)
Dim i As Integer
For i = 0 To numRows
    BN(i) = ThisWorkbook.Worksheets(wsName).Range("A" & i + 2) 'change 5k to a string variable
    Set Table = ThisWorkbook.Worksheets("Cleaned Input").Range("Table2")
    Wave(i) = Application.WorksheetFunction.VLookup(BN(i), Table, 13)
    ThisWorkbook.Worksheets(wsName).Range("F" & i + 2) = Wave(i)
Next
End Function

1 Ответ

3 голосов
/ 12 апреля 2020

Если вы уроните WorksheetFunction, вы можете проверить возвращаемое значение Vlookup, используя IsError(). Если вы включите WorksheetFunction, вы получите ошибку времени выполнения в случае, если Vlookup не найдет совпадение.

Function Waves(BN() As Integer, Table As Range, Wave() As String, _
                   wsName As String, numRows As Integer)

    Dim i As Integer, v, ws As Worksheet

    Set ws = ThisWorkbook.Worksheets(wsName)
    Set Table = ThisWorkbook.Worksheets("Cleaned Input").Range("Table2")

    For i = 0 To numRows
        BN(i) = ws.Range("A" & i + 2) 'change 5k to a string variable
        v = Application.VLookup(BN(i), Table, 13, False)
        If IsError(v) Then v = "No Match"       
        Wave(i) = v
        ws.Range("F" & i + 2) = v
    Next

End Function

Кстати, это действительно должно быть Sub, поскольку оно не возвращает значение напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...