Функция поиска VBA, дающая неправильный номер при ошибке - PullRequest
0 голосов
/ 16 октября 2019

Я ценю, если вы можете помочь мне по приведенному ниже коду. Я пытаюсь выполнить поиск с помощью функции поиска VBA, и она выдает ошибку 1004, когда искомое значение не доступно в массиве таблицы. Я пытался использовать команду «При возобновлении возобновления следующего», чтобы пропустить, когда в результате ошибка, но вместо пропуска и выдачи пустого результата, он выбрасывает предыдущее значение.

Sub x()

Dim d As String

Set src = Range("A1:A5") 'list of names needs to be searched
Set Rng = Range("D1:E5") 'table array

On Error Resume Next

For Each cell In src

d = Application.WorksheetFunction.VLookup(cell.Value, Rng, 2, 0)
cell.Offset(0, 1).Value = d

Next cell

End Sub

Ответы [ 2 ]

1 голос
/ 16 октября 2019

Если вы уроните Worksheetfunction, то несоответствие не вызовет ошибку времени выполнения, и вместо этого вы можете проверить возвращаемое значение, используя IsError()

Sub x()
    Dim src As Range, cell As Range, Rng As Range
    Dim d as Variant  'not String, because it might need to
                      '  hold an error value if no match

    Set src = Range("A1:A5") 'list of names needs to be searched
    Set Rng = Range("D1:E5") 'table array

    For Each cell In src.Cells

        d = Application.VLookup(cell.Value, Rng, 2, 0)
        cell.Offset(0, 1).Value = IIf(IsError(d), "No Match", d)

    Next cell

End Sub
0 голосов
/ 16 октября 2019

Что происходит, когда вы пропускаете назначение, которое вызывает ошибку в d = Application.WorksheetFunction.VLookup(cell.Value, Rng, 2, 0), предыдущее значение не было очищено из переменной d.

Здесь можно попробовать два подхода:
1. Инициализируйте строку в каждой итерации:

On Error Resume Next
For Each cell In src
    d = vbNullString
    d = Application.WorksheetFunction.VLookup(cell.Value, Rng, 2, 0)
    cell.Offset(0, 1).Value = d
Next cell

2. Пропустить присвоение строки ячейке, определив метку, а не Resume Next:

On Error Resume NextCell
For Each cell In src
    d = Application.WorksheetFunction.VLookup(cell.Value, Rng, 2, 0)
    cell.Offset(0, 1).Value = d
NextCell:
Next cell
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...