Здравствуйте, Elena_, Вы писали:

E_>Вообще-то не замечала, что с кавычками тоже проблемы


Наконец-то до меня дошло, что значит эта история с кавычками

Дело в том, что Excel позволяет создавать имена не только для диапазонов, но и для констант, например,
ThisWorkbook.Names.Add "PI", "=3.1415"

При этом имя PI не появится ни в списке имен слева от строки формул, ни в списке имен в диалоге Перейти (Правка->Перейти), оно будет только в общем списке имен (Вставка->Имя), так как оно не относится ни к какому диапазону, при этом его можно использовать в формулах, например,
=2*PI*10

Также можно создать имя и для строковой константы, например
ThisWorkbook.Names.Add "Developer", "=""Elena"""

Это имя Developer тоже не появится ни в списке имен слева от строки формул, ни не в списке имен в диалоге Перейти, так оно также не относится ни к какому диапазону, но его можно использовать в формулах типа
="Разработчик: " & Developer

Поэтому, когда Вы добавляете имя, заключая ссылку на диапазон в кавычки, типа
ThisWorkbook.Names.Add "Addr1", "=""Лист1!$D$17"""

то Вы фактически добавляете строковую константу, не имеющую отношения ни к какому диапазону, и просто по содержанию "похожую" на ссылку, а могло быть не "=""Лист1!$D$17""", а "=""Лист1!$ZZZZZ$177777""", и все бы прекрасно отработало
Чтобы убедиться в этом, попробуйте выбрать Правка->Перейти на листе Лист1 и посмотреть, позволяет ли имя, добавленное с кавычками, перейти к диапазону, на который оно вроде бы ссылается, а на самом деле это не ссылка, а просто текстовая константа, содержащая ссылку.

Естественно, чтобы получить диапазон, используя такое имя, нужно выполнить обратное преобразование, то есть константу преобразовать к ссылке, как раз то, о чем Вы говорили

M>Получается нельзя напрямую использовать результат одной функции(Name.RefersTo()) как аргумент другой функции(Application.GetRange(Name.RefersTo()), сначала необходимо результат преобразовать, а потом уже использовать.


Конечно, это не то, что должно быть

Когда же имя создается с использованием именно ссылки, а не строковой константы,
ThisWorkbook.Names.Add "Addr", "=Лист333!$D$17"

тогда оно появляется и в списке имен слева от строки формул, и в диалоге Перейти, и выбрав его, там или там, Вы сразу переходите к диапазону, соответственно, и в коде дополнительного преобразования не требуется

Если же, как я поняла, у Вас возникают проблемы именно с методом Add, когда Вы добавляете именно ссылку, а не строковую константу, попробуйте записать макрос при выполнении действия присвоения имени, и посмотрите, какой синтаксис требует Ваша версия Excel. Попробуйте выполнить этот макрос уже как макрос в Excel, а потом перенесите в С++. Как я уже говорила, у меня все проблемы бывают с вариациями запятых и точек с запятой
Автор: Elena_    Оценить