Показать сообщение отдельно
Старый 31.01.2008, 17:37   #5  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Всё же попробуем разобраться, почему не работает исходный код. Должен сработать следующий вариант:
X++:
names = comWorkSheet.Names();
name = names.Item(_anyVal);
tmp = name.RefersToR1C1();
ret = [tmp.bStr()];
НО! ТОЛЬКО В ТОМ СЛУЧАЕ, ЕСЛИ:
* имя ячейки введено как имя уровня листа, т.е. с именем листа, например, "Sheet1!MyCell" (а не просто "MyCell")
* и comWorkSheet является тем самым листом (например, Sheet1), на котором это имя определено.

Если же имя ячейки было задано как имя уровня рабочей книги - просто "MyCell" (а, скорее всего, именно так и было), то спасет тот же самый код, если вместо листа comWorkSheet указать книгу (допустим, некий comWorkBook)
X++:
COM comWorkBook;

comWorkBook	= ...; // здесь нужно позаботиться о его получении

names = comWorkBook.Names();
name = names.Item(_anyVal); 
tmp = name.RefersToR1C1();
ret = [tmp.bStr()];
Предпочтение, конечно, стоит отдать второму способу как более универсальному. Параметр метода int _workSheet = 1 в этом случае, получается, не особо и нужен. Тем более, что строка, возвращаемая RefersToR1C1, содержит в себе имя листа.
За это сообщение автора поблагодарили: gl00mie (3).