Ammaretto
Участник

Offline
Сообщений: 12
|
Здраствуйте, друзья!
Есть задачка перевести файл с макросами ms excell в lo. Макрос изменяет внешние связи. Никак не получается реализовать. Нашла ,что связи есть в service ExternalDocLinks, но как их изменить?
Вот часть макроса в ms excel, который меняет все связи, содержащие слово test на pBook: For Each x In ThisWorkbook.LinkSources(xlExcelLinks) If InStr(x, "temp") > 0 Then ThisWorkbook.ChangeLink x, pBook Exit For End If Next
|
|
|
Записан
|
|
|
|
economist
|
Запишите макрос с Ctrl+H и он сделает то же самое. pBook можно скопировать из ячейки или задать явно.
|
|
|
Записан
|
Руб. за сто, что Питоньяк Любит водку и коньяк! Потому что мне, без оных, - Не понять его никак...
|
|
|
Ammaretto
Участник

Offline
Сообщений: 12
|
Что значит записать макрос с Ctrl+H?
pbook задана явно, это не важно
|
|
|
Записан
|
|
|
|
economist
|
1) Сервис - Макросы - Записать... 2) Ctrl+H - Найти - x - Заменить - pBook - Заменить все. Тут x и pBook - например, Книга1 и Книга2 3) Остановить запись, Сохранить макрос.
Запуск макроса изменит внешнюю связь путем замены подстроки в формулах листа/книги. Может всплыть окно замены ссылок, это нормально.
Чтобы макрос не испарился из формата XLS - файл придется сохраниить в ODS. Хотя возможны варианты с опциями совместимости Option VBASupport 1 и настройками Calc - Загрузка/Сохранение.
|
|
|
Записан
|
Руб. за сто, что Питоньяк Любит водку и коньяк! Потому что мне, без оных, - Не понять его никак...
|
|
|
Ammaretto
Участник

Offline
Сообщений: 12
|
Понятно, спасибо, но это не совсем то. Мне нужно изменить все ссылки, которые находятся в правки, внешние ссылки/ Если делать через замену в ячейках, то внешняя ссылка там не изменяется. И я не знаю Х, мне нужно изменить все внешние ссылки, которые содержат определенное слово( в примере это temp)
|
|
|
Записан
|
|
|
|
Ammaretto
Участник

Offline
Сообщений: 12
|
Хотя на самый крайней случай попробую Через замену, как получить имя ссылок то я знаю...А вот как изменить... oLink=wb.ExternalDoclinks.getElementNames()
|
|
|
Записан
|
|
|
|
economist
|
Ссылок в LO Calc много:
Ссылки на ячейки/диапазоны (без форматирования) Ссылки на Диапазоны (с форматированием) Ссылки в DataBaseRange - диапазонах DDE-ссылки OLE-ссылки
Для каждой из них - разные инструменты и команды сложного API, вот почему я показал самый простой путь.
Окно Правка - Ссылка на внешние данные - чисто "созерцательное", чаще всего ни одной кнопке или тексту в нём - верить нельзя. И да, оно обновляется (даже после макроса из #3), но лишь после переоткрытия файла.
|
|
|
Записан
|
Руб. за сто, что Питоньяк Любит водку и коньяк! Потому что мне, без оных, - Не понять его никак...
|
|
|
Ammaretto
Участник

Offline
Сообщений: 12
|
Очень интересно. После переоткрытия файла и правда ок. Хотелось бы конечно пойти по сложному пути, но так пока ничего не нашла, то воспользуюсь простым. Большое спасибо за подробные ответы!
|
|
|
Записан
|
|
|
|
economist
|
Сохранение файла и его перезагрузку можно тоже тоже записать как макрос. Для пользователя файл просто "мигнет" на секунду.
Сложный путь требует реально много времени. Моя метрика трудозатрат на написания условной "строки кода" на MSO VBA и на LOBasic дает соотношение 1:4, это непозволительно большой отрыв. Одно радует и прощает "отстающего" - всё-таки на LO Basic можно написать всё, то что и на VBA. И что это бесплатно и навсегда.
|
|
« Последнее редактирование: 29 Декабрь 2020, 15:59 от economist »
|
Записан
|
Руб. за сто, что Питоньяк Любит водку и коньяк! Потому что мне, без оных, - Не понять его никак...
|
|
|
|