Немного покопался... Да, по человечески (без программирования) сделать это нельзя.

Но, можно немного доработать напильником.
Немного теории для начала. В интерфейсах Excel есть два метода для выбора Range: один в интерфейсе Worksheet (range выбирается в контексте листа книги Excel), другой в интерфейсе Application (range можно выбирать вообще как угодно, хоть из другого файла). Так вот, в документообороте Axapta используется первый метод, но приложив минимум усилий можно заставить его использовать второй.
Во-первых, надо написать обертку для второго метода. В класс
SysExcelApplication добавьте абстрактный метод range:
Код:
abstract public SysExcelRange range(str _rangeName = '')
{
}
В расширяющие его классы тоже добавьте этот метод. В
SysExcelApplication_2000:
Код:
public SysExcelRange range(str _rangeName = "")
{
return SysExcelRange::construct(MSOfficeVersion::Office2000,
_rangeName ?
application.range(_rangeName) :
application.range());
}
В
SysExcelApplication_XP:
Код:
public SysExcelRange range(str _rangeName = "")
{
return SysExcelRange::construct(MSOfficeVersion::OfficeXP,
_rangeName ?
application.range(_rangeName) :
application.range());
}
Теперь завершающий штрих. Нужно заставить класс
DocuActionCOM_Excel использовать правильный метод выбора range. Для этого в методе
gotoBookmark исправьте
Код:
sysExcelRange = sysExcelWorksheet.range(bookmark);
на
Код:
sysExcelRange = sysExcelApplication.range(bookmark);
В принципе, это все, но есть один маленький нюанс: можно выделять только range, который расположен на активном листе. Выделение range осуществляется методом range.select, поэтому лучше избавиться от его вызовов. Если Вы исправляли метод
mainInsertField так, как я рекомендовал в одном из предыдущих постов, то там как раз есть вызов range.select и его следует убрать. Еще один вызов range.select есть в методе
insertHardLineBreak. Его тоже лучше убрать.