Как исправить ошибку типа 13 на моем VLOOKUP? - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть этот код VBA в Excel.Когда я выполняю его, у меня появляется эта ошибка «Ошибка 13: Несовместимый тип».

Vlookup применяет между двумя рабочими книгами.

Range("A2:232") содержит тип даты и Cells(i,Lcol-4) тоже

Пожалуйста, помогите.

Это мой код

    If Application.Vlookup(Cells(i,Lcol-4), Workbooks("V_TAUX.xlsx").Sheets(1).Range("A2:232"),1,False) = Cells(i,Lcol-4) Then
        Instruction...
        Instruction....
    End If

1 Ответ

0 голосов
/ 26 сентября 2019

Cells(i,Lcol-4) или эквивалент Cells(i,Lcol-4).Value возвращает значение типа Дата, тогда как даты, указанные в вашей рабочей таблице, на самом деле являются серийными номерами, отформатированными как даты.

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

Однако, поскольку ошибка, возвращаемая VLookup, сравнивается со значением в Cells(i,Lcol-4), вывозникнет ошибка разрыва типа.

Итак, сначала я бы посоветовал вам преобразовать значение поиска в тип данных Long ...

 Application.Vlookup(CLng(Cells(i,Lcol-4).Value), . . .

Затем, как уже было предложеноChronocidal, присвойте возвращаемое значение Variant, чтобы вы могли использовать IsError для проверки на наличие ошибки ...

Dim matchVal As Variant

matchVal = Application.VLookup(CLng(Cells(i, Lcol - 4).Value), Workbooks("V_TAUX.xlsx").Sheets(1).Range("A2:A232"), 1, False)

If Not IsError(matchVal) Then
    'etc
    '
    '
End If

Хотя, поскольку вы просто проверяете совпадение, вы можете использовать Application.Matchвместо ...

Dim matchVal As Variant

matchVal = Application.Match(CLng(Cells(i, Lcol - 4).Value), Workbooks("V_TAUX.xlsx").Sheets(1).Range("A2:A232"), 0)

If Not IsError(matchVal) Then
    'etc
    '
    '
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...