Всё же попробуем разобраться, почему не работает исходный код. Должен сработать следующий вариант:
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, содержит в себе имя листа.