Комбинируйте INDIRECT с функцией ADRESS в VBA - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть Excel листы в той же книге: Лист 1 (имя AK):

      A      B     C
   --------------------
1  |  A2  |     |     |
   --------------------
2  |  20  |     |     |
   --------------------

Лист 2 содержит следующую формулу: =INDIRECT("AK!" & ADDRESS(2;1;1;"TRUE";"AK"))

Теперь я хочудобавьте эту формулу в таблицу динамически через VBA и записали следующую строку:

ActiveWorkbook.Worksheets("Sheet2").Range("q2").Formula = "=IF(A2<>"""",VLOOKUP(T2,INDIRECT(""AK!"" & ADDRESS(2,1,1,TRUE,""AK"")):INDIRECT(""AK!"" & ADDRESS(2,2,1,TRUE,""AK"")),2,0),"""")"

Однако я получаю ошибку #BEZUG (я использую Excel на немецком языке).Что не так?

Когда я набираю части формулы в ячейку, я получаю следующие результаты:

=ADDRESS(2;1;1;TRUE;"AK") приводит к AK!$A$1, как и ожидалось.

Однако =INDIRECT("AK!" & ADDRESS(2;1;1;"TRUE";"AK")) приводит к #BEZUG.

Спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Вложенность Indirect это решение:

`=INDIRECT("AK!" & INDIRECT("AK!" & ADDRESS(2;1;1;"TRUE";"AK")))`
0 голосов
/ 07 декабря 2018

"AK!" & ADDRESS(2;1;1;"TRUE";"AK") даст AK!AK!$A$2, поскольку функция Address уже включает обозначение листа.

Используйте взамен =INDIRECT(ADDRESS(2;1;1;"TRUE";"AK").

Правильно ли "TRUE"?Разве это не должно быть 0 (стиль R1C1) или 1 (стиль A1)?

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