В этой статье я покажу как можно быстро и качественно изменить адреса гиперссылок на листе Excel.
Существуют ситуации, когда на листе есть много гиперссылок(если еще на знакомы с гиперссылками - Что такое гиперссылка?) на различные папки или интернет ресурсы. И иногда случаются ситуации когда адреса этих гиперссылок надо поменять. Как правило это происходит если либо домен сменился, либо на сервере добавилась директория и эти изменения надо отразить в гиперссылках, либо все просто было перемещено в другую папку. Для примера возьмем такие исходные данные: надо заменить текст ссылки
Прежде чем начать замену необходимо еще определить каким способом установлена гиперссылка. Если установлена через формулу
- выделяем диапазон с гиперссылками;
- жмем
Ctrl +H .- Найти:
.excel_vba - Заменить на:
excel-vba - Жмем кнопочку "Параметры" и устанавливаем Область поиска - Формулы и снимаем галочку "Ячейка целиком"
- Найти:
- Жмем "Заменить все"
Теперь адреса ссылок должны поменяться.
Все гораздо сложнее, если гиперссылки были созданы через стандартное меню: правый клик мыши на ячейке - Гиперссылка. Тут фокус с заменой через
Sub Replace_Hyperlink() Dim rCell As Range, rRange As Range, sWhatRep As String, sRep As String On Error Resume Next Set rRange = Application.InputBox("Укажите диапазон для замены", "Выбор данных", Type:=8) If rRange Is Nothing Then Exit Sub sWhatRep = InputBox("Что меняем?", "Ввод данных", ".excel_vba") sRep = InputBox("На что меняем?", "Ввод данных", "excel-vba") If sWhatRep = "" Then Exit Sub If sRep = "" Then If MsgBox("Хотите заменить " & sWhatRep & " на пусто?", vbCritical + vbYesNo, "Предупреждение") = vbNo Then Exit Sub End If Application.ScreenUpdating = 0 For Each rCell In rRange If rCell.Hyperlinks.Count > 0 Then If rCell.Hyperlinks(1).Address = rCell.Value Then rCell = Replace(rCell.Value, sWhatRep, sRep) End If If rCell.Hyperlinks(1).Address <> "" Then rCell.Hyperlinks(1).Address = Replace(rCell.Hyperlinks(1).Address, sWhatRep, sRep) End If If rCell.Hyperlinks(1).SubAddress <> "" Then rCell.Hyperlinks(1).SubAddress = Replace(rCell.Hyperlinks(1).SubAddress, sWhatRep, sRep) End If End If Next rCell Application.ScreenUpdating = 1 End Sub |
- создаем стандартный модуль и помещаем в него код макроса выше
- жмем
Alt +F11 и выбираем макросReplace_Hyperlink (или создаем кнопку для вызова макроса на листе) - в первом диалоговом окне указываем в каком диапазоне надо найти гиперссылки и заменить в них адрес
- во втором диалоговом окне указываем какой текст заменить
- в третьем диалоговом окне указываем на что заменить указанный в первом окне текст
Примерно так же можно заменить гиперссылки в объектах на листе(например, картинках и кнопках):
Sub Replace_Hyperlink_inShape() Dim oSh As Shape, sWhatRep As String, sRep As String Dim s As String sWhatRep = InputBox("Что меняем?", "Ввод данных", "www.excel-vba.com") sRep = InputBox("На что меняем?", "Ввод данных", "www.excel-vba.ru") On Error Resume Next For Each oSh In ActiveSheet.Shapes s = "" s = oSh.Hyperlink.Address If s <> "" Then oSh.Hyperlink.Address = Replace(oSh.Hyperlink.Address, sWhatRep, sRep) End If Next End Sub |
Данные код работает почти так же как и предыдущий:
- создаем стандартный модуль и помещаем в него код макроса выше
- жмем
Alt +F11 и выбираем макросReplace_Hyperlink_inShape (или создаем кнопку для вызова макроса на листе) - в первом диалоговом окне указываем какой текст заменить
- во втором диалоговом окне на что заменить указанный в первом окне текст
Гиперссылки всех объектов на листе будут изменены. Если у объекта нет гиперссылки - объект будет пропущен.
Чтобы
заменить на такую:
тогда надо будет выделить объекты на листе, для которых необходимо заменить гиперссылки, и запустить макрос.
Пример замены гиперссылок.xls (58,0 КиБ, 12 743 скачиваний)
Так же см.:
Что такое гиперссылка?
Огромное спасибо автору !
Большой респект автору, ооочень помогло!
Спасибо!
Очень помогли!
А как то же самое проделать но только если ссылки на кнопках?
Сэкономил себе два дня! Автор ваще красава!
Garisson - примерно так:
Почему то не срабатывает, в этом месте видимо objShape.Hyperlink.Address = Replace(objShape.Hyperlink.Address, sWhatRep, sRep), вывожу перед этим MsgBox(objShape.Hyperlink.Address) и адреса нет, хотя имена кнопок на листе определяет.
Что я могу сказать: я привел примеры. Последний код тоже рабочий - сам проверял. Вам надо лишь адаптировать под себя. Писать код конкретно под Ваши нужны нет времени - вас много, а я один. Обращайтесь в форум.
Ок спасибо, разберусь.
Спасибо огромное! Вы меня спасли! Так не хотелось заниматься монотонной работой перед новым годом! С наступающим Вас!