В чем ошибка в этом определении диапазона VBA для Excel? - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь запрограммировать функцию, похожую на vlookup, в Excel VBA. Для этого мне нужно манипулировать данными диапазона, чтобы определение диапазона с помощью cell () соответствовало моим интересам. Но я просто не знаю, что я делаю не так. Вот первый код, который работает:

Function GLookUp2(a, b, P, Q, R)

    Dim S As Workbook

    Set S = Workbooks(P)

    Dim T As Worksheet

    Set T = S.Sheets(Q)

    Dim U As Range

    Set U = T.Range(R)

    GLookUp2 = Application.VLookup(a, U, b, False)
End Function

Однако этот код не работает.

Function GLookUp1(a, b, P, Q, i, j, k, l)

    Dim S As Workbook

    Set S = Workbooks(P)

    Dim T As Worksheet

    Set T = S.Sheets(Q)

    Dim U As Range

    Set U = T.Range(Cells(j, i), Cells(l, k))

    GLookUp1 = Application.VLookup(a, U, b, False)
End Function

Можете ли вы сказать мне, почему? Спасибо.

1 Ответ

0 голосов
/ 05 сентября 2018
Set U = T.Range(Cells(j, i), Cells(l, k))

Это доступ к Range на листе T с использованием двух диапазонов из ActiveSheet, потому что эти два вызова Cells не квалифицированы с явным объектом рабочего листа.

Другими словами, он делает это:

Set U = SomeSheet.Range(ActiveSheet.Cells(j, i), ActiveSheet.Cells(l, k))

Это взорвется, когда ActiveSheet не SomeSheet или когда j, i, l или k равно 0.

Это исправит это:

Set U = T.Range(T.Cells(j, i), T.Cells(l, k))

Поскольку теперь Cells гарантированно извлекает из одного и того же объекта листа.

Примечание, избегайте однобуквенных имен переменных, особенно в нижнем регистре l.

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