Изменение внешних связей макросом

Автор Ammaretto, 25 декабря 2020, 07:41

0 Пользователи и 1 гость просматривают эту тему.

Ammaretto

Здраствуйте, друзья!

Есть задачка перевести файл с макросами 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

Что значит записать макрос с Ctrl+H?

pbook задана явно,  это не важно

economist

1) Сервис - Макросы - Записать...
2) Ctrl+H - Найти - x -  Заменить - pBook - Заменить все. Тут x и pBook - например, Книга1  и Книга2
3) Остановить запись, Сохранить макрос.

Запуск макроса изменит внешнюю связь путем замены подстроки в формулах листа/книги. Может всплыть окно замены ссылок, это нормально.

Чтобы макрос не испарился из формата XLS - файл придется сохраниить в ODS. Хотя возможны варианты с опциями совместимости Option VBASupport 1 и настройками Calc - Загрузка/Сохранение.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Ammaretto

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

Ammaretto

Хотя на самый крайней случай попробую Через замену, как получить имя ссылок то я знаю...А вот как изменить...
oLink=wb.ExternalDoclinks.getElementNames()

economist

Ссылок в LO Calc много:

Ссылки на ячейки/диапазоны (без форматирования)
Ссылки на Диапазоны (с форматированием)
Ссылки в DataBaseRange - диапазонах
DDE-ссылки
OLE-ссылки

Для каждой из них - разные инструменты и команды сложного API, вот почему я показал самый простой путь.

Окно Правка - Ссылка на внешние данные - чисто "созерцательное", чаще всего ни одной кнопке или тексту в нём - верить нельзя. И да, оно обновляется (даже после макроса из #3), но лишь после переоткрытия файла.  
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Ammaretto

Очень интересно. После переоткрытия файла и правда ок.
Хотелось бы конечно пойти по сложному пути, но так пока ничего не нашла, то воспользуюсь простым.
Большое спасибо за подробные ответы!

economist

#8
Сохранение файла и его перезагрузку можно тоже тоже записать как макрос. Для пользователя файл просто "мигнет" на секунду.

Сложный путь требует реально много времени. Моя метрика трудозатрат на написания условной "строки кода" на MSO VBA и на LOBasic дает соотношение 1:4, это непозволительно большой отрыв. Одно радует и прощает "отстающего" - всё-таки на LO Basic можно написать всё, то что и на VBA. И что это бесплатно и навсегда.    
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...