Автозамена гиперссылок в Excel?
Модератор: Naeel Maqsudov
Товарисчи кто сталкивался с подобной проблемой и/или знает как ее решить.
Есть некий реестр в Excel содержащий гиперссылки на другие файлы (на сам файл, т.е. кликаешь по ссылке и тебе открывается этот файл).
Но вот случилась проблема, путь к файлам изменился. Править каждую ссылку вручную утомительно, автозамена в данном случае не работает,
правка->связи неактивна.
Кто знает как решить эту проблему?
Заранее благодарен.
Есть некий реестр в Excel содержащий гиперссылки на другие файлы (на сам файл, т.е. кликаешь по ссылке и тебе открывается этот файл).
Но вот случилась проблема, путь к файлам изменился. Править каждую ссылку вручную утомительно, автозамена в данном случае не работает,
правка->связи неактивна.
Кто знает как решить эту проблему?
Заранее благодарен.
у меня тоже есть такая проблема! как ее решить не знаю!
единственно до чего додумался это копировать такие ячейки, бросать в блокнот, а потом бросать тот же список обратно в эксель, но в тот же столбик нельзя, гиперссылки снова будут, а в другой столбик. Метод подходит, если данных не много и они все в одном столбике, но в идеале эту проблему надо решать по другому.
единственно до чего додумался это копировать такие ячейки, бросать в блокнот, а потом бросать тот же список обратно в эксель, но в тот же столбик нельзя, гиперссылки снова будут, а в другой столбик. Метод подходит, если данных не много и они все в одном столбике, но в идеале эту проблему надо решать по другому.
Да будет так! 

- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
Стартуем запись макроса, кликаем на гиперссылке правой кнопкой мыши, выполняем пункт "Гиперссылка/Изменить гиперссылку..." - в окне меняем значение на нужное, жмём ОК. Останавливаем запись макроса. Открываем VB - Alt-F11, открываем наш модуль и видим макрос вида:
Далее адаптируем к нашим требованиям... Если непонятно, попозже напишу подробнее
Код: Выделить всё
Selection.Hyperlinks(1).Address = "c:\readme.txt"
- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
Во! Даже лучше: открываем хелп по Hyperlinks и видим в примере то, что надо:
только в цикле пишем нужные преобразования
Код: Выделить всё
For Each h in Worksheets(1).Hyperlinks
If Instr(h.Name, "Microsoft") <> 0 Then h.Follow
Next

- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Да, пакетная правка ссылок станартными функциями интерфейса не предусмотрена. Прийдется писать макрос.
Этот макрос пролистывает все гиперссылки на текущем листе. Соответственно надо
lnk.Address = новый_адрес
где новый адрес вычисляется путем выкусывания и вставки части строки. Это уж сами напете, я надеюсь.
Код: Выделить всё
Sub qwe()
Dim lnk As Hyperlink
For Each lnk In ActiveSheet.Hyperlinks
MsgBox lnk.Address
Next
End Sub
lnk.Address = новый_адрес
где новый адрес вычисляется путем выкусывания и вставки части строки. Это уж сами напете, я надеюсь.
макросы это ай-яй-яй!Игорь Акопян писал(а):Стартуем запись макроса...

а попроще нельзя ли?
Да будет так! 

- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Нет
Спасибо большое, только я вот с VBA дело на имел, только в свои времена с Qbasic.Naeel Maqsudov писал(а): lnk.Address = новый_адрес
где новый адрес вычисляется путем выкусывания и вставки части строки. Это уж сами напете, я надеюсь.
Т.е., могли вы бы объяснить подробнее:
1. Лучше всего как эту ссылку вытянуть в столбец рядом, там бы я ее поменял на функцию "гиперссылка" и в дальнейшем не мучался.
или
2. Как изменить путь
путь был вида \\папка 1\папка2\n_file.xls
а нужно изменить на \\папка 1\папка2\подпапка_n\n_file.xls, где n куча разных имен.
В жизни это выглядит так, была сетевая директорий в которой скопом хранились документы вида "название контрагента дата документа".
потом в этой директории создали директории с именем контрагента, и туда переместили все файлы относящиеся к данному контрагенту.
Фу надеюсь понятно объяснил.
Если нет, пойду искать пособие по VBA

Игорь Акопян писал(а):Стартуем запись макроса, кликаем на гиперссылке правой кнопкой мыши, выполняем пункт "Гиперссылка/Изменить гиперссылку..." - в окне меняем значение на нужное, жмём ОК. Останавливаем запись макроса. Открываем VB - Alt-F11, открываем наш модуль и видим макрос вида:Код: Выделить всё
Selection.Hyperlinks(] Далее адаптируем к нашим требованиям... Если непонятно, попозже напишу подробнее[/quote] Непонятно, как взять две части старого имени, и между ними вставить нужный кусок пути. Т.е. 1. Оператор который содержит текущее имя гиперссылки какой? 2. Дальше, что то вроде substr()? 3. Как все это вместе сцеплять, через &? Спасибо за помошь.
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Отлично! Используем функции Mid$, Left$, Right$, Len, InStr, ну и сцепление строк, разумеется ("йцук" & "енг")Спасибо большое, только я вот с VBA дело на имел, только в свои времена с Qbasic.
1. Лучше всего как эту ссылку вытянуть в столбец рядом, там бы я ее поменял на функцию "гиперссылка" и в дальнейшем не мучался.
О! классная идея, как это мне самому в голову не пришло!

Код: Выделить всё
Sub qwe()
Dim lnk As Hyperlink
For Each lnk In ActiveSheet.Hyperlinks
lnk.Range.Next.Value = lnk.Address
Next
End Sub
Sub unqwe()
Dim lnk As Hyperlink
For Each lnk In ActiveSheet.Hyperlinks
lnk.Address = lnk.Range.Next.Value
Next
End Sub
Можно также использовать отдельный лист для правки адресов. Тогда вместо lnk.Range.Next.Value надо писать WorkSheets("Отдельный лист").Cells(i,1)
переменную i до цикла установить в 1 и увеличивать перед Next.
Но в этом случае между вызовами qwe и unqwe НЕЛЬЗЯ править ссылки на листе, иначе они перемешаются!