Как предотвратить потерю данных с помощью Application.VLookup? - PullRequest
0 голосов
/ 13 марта 2019

Следующий макрос использует функцию VLookup между двумя рабочими книгами. Обе книги содержат таблицы. Цель - book1 для обновления значений с book2

Потеря данных (ячейки со значениями в book1 , столбец 7 удаляется) происходит, когда значение поиска отсутствует в book2 . Что приводит к моему вопросу: как предотвратить это удаление?

Sub Update()
Dim lookFor As Range
Dim srchRange As Range

Dim book1 As Workbook
Dim book2 As Workbook

Dim book2Name As String
book2Name = "table2.xlsm"

Dim book2NamePath As String
book2NamePath = ThisWorkbook.Path & "\" & book2Name

Set book1 = ThisWorkbook

If IsOpen(book2Name) = False Then Workbooks.Open (book2NamePath)
Set book2 = Workbooks(book2Name)

Set lookFor = book1.Sheets(1).Range("a23:a100")
Set srchRange = book2.Sheets(1).Range("b:f")

lookFor.Offset(0, 7).Value = Application.VLookup(lookFor, srchRange, 2, False)

End Sub

1 Ответ

0 голосов
/ 13 марта 2019

Проверьте возвращаемое значение и обновите только, если есть что вернуть.

Dim val as Variant

Set lookFor = book1.Sheets(1).Range("a23:a100")
Set srchRange = book2.Sheets(1).Range("b:f")

val = Application.VLookup(lookFor.Cells(1), srchRange, 2, False)

If Not IsError(val) Then
    lookFor.Offset(0, 7).Value = val
End If

Вы можете проверить возврат к варианту с помощью Application.VLookup или Application.Match. Он должен быть возвращен варианту, и он не работает с WorksheetFunction.VLookup или WorksheetFunction.Match.

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