Excel VBA VLookup Ошибка времени выполнения «1004» - PullRequest
0 голосов
/ 26 апреля 2018

Я хочу объединить два листа. В Tabelle 3 уже есть некоторые данные. Поэтому я определил Next Free Row (NFR) и хочу, чтобы мои данные из Tabelle 5 были добавлены в следующую свободную строку в Tabelle 3. Поэтому я написал следующую функцию VLookup.

Sub ConsolidateData()

Dim lastrow As Long
Dim NFR As Long

lastrow = Tabelle5.Range("A" & Rows.Count).End(xlUp).Row
NFR = Tabelle3.Range("A" & Rows.Count).End(xlUp).Offset(-3).Row

Set myrange = Tabelle5.UsedRange


    For i = 4 To lastrow


        Tabelle3.Cells(NFR + i, 1) = Application.WorksheetFunction.VLookup(Tabelle5.Cells(i, 1), myrange, 1, False)


        Tabelle3.Cells(NFR + i, 2) = Application.WorksheetFunction.VLookup(Tabelle5.Cells(i, 1), myrange, 2, False)


    Next i

End Sub

Несмотря на то, что я уже использую этот код в другой книге, где он работает гладко, он здесь не работает. Вместо Run-time error '1004' происходит для этой строки:

Tabelle3.Cells(NFR + i, 1) = Application.WorksheetFunction.VLookup(Tabelle5.Cells(i, 1), myrange, 1, False)

Кто-нибудь видит ошибку или может сказать мне, что я неправильно закодировал?

1 Ответ

0 голосов
/ 26 апреля 2018

Кажется, что Vlookup не может найти искомое значение и поэтому выдает ошибку. Application.WorksheetFunction.VLookup вернет ошибку «1004», если значение не может быть найдено. Пожалуйста, рассмотрите следующий тест:

  • Поместите в ячейку A2 значение 15.
  • Запуск под макросами

макрос 1:

Sub test1()

check = Application.WorksheetFunction.VLookup(15, Range("A1:A5"), 1, False)

Debug.Print check

End Sub

макрос 2:

Sub test2()

check = Application.WorksheetFunction.VLookup(1, Range("A1:A5"), 1, False)

Debug.Print check

End Sub

Как видите, второй выдает ошибку. Чтобы преодолеть эту проблему, вы должны изменить WorksheetFunction.VLoookup на Application.VLookup и реализовать проверку ошибок:

Sub test2()

If IsError(Application.VLookup(1, Range("A1:A5"), 1, False)) = False Then

check = Application.VLookup(1, Range("A1:A5"), 1, False)

End If

Debug.Print check

End Sub

Пожалуйста, посмотрите здесь также: Как обработать ошибку 1004 Ошибка с WorksheetFunction.VLookup?

...