Цитата:
Сообщение от
blokva
X++:
hyperLinks.Add(activeRange, "#" + _hyperLink, "" , "",_textToDisplay);
А что это за диез перед _hyperLink? Зачем он нужен? С ним чего-то не работает, создается инвалидная сцылка...
Кстати, пора, наверное, интенсивно переходить от void-методов к методам, возвращающим COM объекты Excel, пригодные для удобной дальнейшей работы.
Void-методы что-то делают (создают, удаляют, вставляют, бордюрят и т.п.) и далее совершенно не заботятся о том, как мы будем добывать, например, гиперссылку, если она нам потребуется дальше. И от парочки "_bookMark, _worksheet" лучше перейти к нормальному использованию range и передавать его туды-сюды параметром как COM-объект (а не текстовым адресом и номером листа). Range сам несет в себе информацию о worksheet, на котором он находится. A worksheet в свою очередь - о workbook, в состав которого он входит. Не надо постоянно "искать" range при помощи findRange. C COM range, определенным на одном worksheet, можно легко оперировать при активном другом (например, задавать значение или делать фонт жирным).
Создал примерчик. Используемый класс - маленький наследник ComExcelDocument_RU см. в прилагаемом проекте.
X++:
static void Job88(Args _args)
{
ComExcelDocument_RU_2 doc = new ComExcelDocument_RU_2();
// класс ..._2 в прилагаемом проекте
COM range1, range2;
COM hyperlink;
;
doc.newFile();
doc.insertSheet();
range2 = doc.getRange('C10', 2); // range2 - на втором листе и всё он сам прекрасно знает о себе
// и всё это выдаст, когда его спросят
range1 = doc.getRange('D20', 1); // активировал таким образом первый лист, чтобы показать,
// что лист, на котором создается гиперссылка (второй), не обязательно должен быть активным
hyperlink = doc.setHyperLink( range2, 'http://www.axforum.info/', 'Вызов Аксфорума из ячейки');
// легко совершаем действие, "непрописанное" в setHyperLink
hyperlink.ScreenTip('Это всплывающая подсказка к гиперссылке');
// всё! смотрим ссылку на втором (!) листе, наводим на нее мышь, щелкаем по ней
}