Хитрости »
30 Май 2011 156199 просмотров
Как массово изменить гиперссылки?
В этой статье я покажу как можно быстро и качественно изменить адреса гиперссылок на листе Excel.
Существуют ситуации, когда на листе есть много гиперссылок(если еще на знакомы с гиперссылками — Что такое гиперссылка?) на различные папки или интернет ресурсы. И иногда случаются ситуации когда адреса этих гиперссылок надо поменять. Как правило это происходит если либо домен сменился, либо на сервере добавилась директория и эти изменения надо отразить в гиперссылках, либо все просто было перемещено в другую папку. Для примера возьмем такие исходные данные: надо заменить текст ссылки .excel_vba на текст excel-vba.
Прежде чем начать замену необходимо еще определить каким способом установлена гиперссылка. Если установлена через формулу ГИПЕРССЫЛКА(HYPERLINK), то все просто:
- выделяем диапазон с гиперссылками;
- жмем Ctrl+H.
- Найти: .excel_vba
- Заменить на: excel-vba
- Жмем кнопочку «Параметры» и устанавливаем Область поиска — Формулы и снимаем галочку «Ячейка целиком«
- Жмем «Заменить все«
Теперь адреса ссылок должны поменяться.
Все гораздо сложнее, если гиперссылки были созданы через стандартное меню: правый клик мыши на ячейке — Гиперссылка. Тут фокус с заменой через Ctrl+H не пройдет. В таких случаях придется прибегнуть к помощи VBA(Visual Basic for Applications) или как еще называют эти коды — макросы. Текст такого макроса:
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 (или создаем кнопку для вызова макроса на листе)
- в первом диалоговом окне указываем какой текст заменить
- во втором диалоговом окне на что заменить указанный в первом окне текст
Гиперссылки всех объектов на листе будут изменены. Если у объекта нет гиперссылки — объект будет пропущен.
Чтобы
заменить гиперссылки только в выделенных объектах
необходимо строку
For Each oSh In ActiveSheet.Shapes
заменить на такую:
For Each oSh In Selection.ShapeRange
тогда надо будет выделить объекты на листе, для которых необходимо заменить гиперссылки, и запустить макрос.
Скачать пример
Пример замены гиперссылок.xls (58,0 KiB, 11 331 скачиваний)
Так же см.:
Что такое гиперссылка?
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика
Всем привет! Как-то на работе столкнулся на работе с интересной задачей. Во время работе Excel выдал ошибку и закрыл окно. После попытки открыть файла оказалось, что все гиперссылки в документе изменили часть своего пути.
Решение
- Открываем VBA (Visual Basic for Applications) через Alt+F11
- В окне Project-VBAProject (левой верхнее) правой кнопкой мыши делаем Insert — Module
- В появившемся большом окне вставляем код макроса вида с нашими ссылками (первая ссылка — что нужно поменять, вторая — на что нужно поменять)
Sub Hyper() For i = 1 To ActiveSheet.Hyperlinks.Count ActiveSheet.Hyperlinks(i).Address = Replace(ActiveSheet.Hyperlinks(i).Address, "../../../AppData/Roaming/Microsoft/Excel/", "UsersUserDesktopФирмаДоговора") Next End Sub
4. Закрываем VBA.
5. Через Сервис — Макрос — Макросы ( или по Alt+F8) выбираем макрос и нажимаем «Выполнить».
Пути гиперссылкок будут заменены. Проверено — работает!
Спасибо за помощь http://forum.ixbt.com/topic.cgi?id=23:33826
Posted in WINDOWS and tagged excel.
Kazakoff Пользователь Сообщений: 9 |
Доброе время суток! |
tgoring Пользователь Сообщений: 3 |
#2 19.06.2014 14:30:53 Ссылки все на одном листе?
Изменить нужно то, что в кавычках. |
||
The_Prist Пользователь Сообщений: 14181 Профессиональная разработка приложений для MS Office |
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
Kazakoff Пользователь Сообщений: 9 |
нет, ссылки во всей книге. в итоге надо чтобы удалилась чать пути /../../../Папка/Папка/ и осталось только название файла и ячейки…. |
Kazakoff Пользователь Сообщений: 9 |
The_Prist,это мне не помогло, дело в том, что каждая гиперссылка в файле 1 имеет адрес разной ячейки второстепенного файла, поэтому мне необходимо только удалить первую часть адреса |
The_Prist Пользователь Сообщений: 14181 Профессиональная разработка приложений для MS Office |
Т.е. попробовать лень? Код принимает в качестве аргумента не полный адрес — а часть. Как раз первую часть ссылок(одинаковую) указываете. Если надо удалить — в качестве заменяемого адреса пусто. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
Kazakoff Пользователь Сообщений: 9 |
#7 19.06.2014 17:45:19 The_Prist, не думаю, что я ленивый человек. Пробовал я много чего. К примеру:
комп думает три секунды и…..ничего не меняется |
||
vikttur Пользователь Сообщений: 47199 |
Кнопка для форматирования кода в сообщении |
Finswimmer Пользователь Сообщений: 424 |
#9 19.06.2014 17:49:07 Вот таким кодом я вытаскивал весь адрес из гиперссылки. А доработать чтобы остались названия ячейки, не сложно
|
||
Kazakoff Пользователь Сообщений: 9 |
#10 19.06.2014 17:49:56 Спасибо vikttur, ,
|
||
Kazakoff Пользователь Сообщений: 9 |
#11 19.06.2014 17:53:10 пробовал также:
не хочет работать и все тут. Я уже и в параметрах безопасности макросам все разрешил… |
||
Игорь Пользователь Сообщений: 3631 |
Кросс: http://programmersforum.ru/showthread.php?t=262907Kazakoff , нет файла — нет помощи |
Kazakoff Пользователь Сообщений: 9 |
я прошу прощения. вот создал пример, там должен быть макрос test2. Может я чего не догоняю, но он не срабатывает. |
The_Prist Пользователь Сообщений: 14181 Профессиональная разработка приложений для MS Office |
Попробовал заменить «……..COMMONTDMaintenanceТранспортная сетьТранспортная сеть» на пусто своим кодом — все заменилось, никаких проблем. И код в книге работает. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
Kazakoff Пользователь Сообщений: 9 |
программа сама почему-то заменила все пробелы на «%20» |
The_Prist Пользователь Сообщений: 14181 Профессиональная разработка приложений для MS Office |
Какая такая программа?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
Kazakoff Пользователь Сообщений: 9 |
The_Prist,большущее Вам спасибо, поставили меня на правильный путь!!! %20 — это эксель так заменил все пробелы в ссылках. и я тупо копировал путь из ссылки в макрос с процентами, убрал и все получилось. Спасибо, что потратили на меня время!! |
4vaker Пользователь Сообщений: 26 |
#19 20.08.2014 20:05:03 Добрый вечер!
Например «июль» на «август». |
||
а через обычную замену Ctrl-H по части формулы — не работает? |
|
4vaker Пользователь Сообщений: 26 |
работает, но надо каждой ячейке нажимать ENTER, а ячеек слишком дохрена, это никак не вариант. |
зачем жать Enter, если есть кнопка «заменить все»? |
|
4vaker Пользователь Сообщений: 26 |
как же Вы не понимаете, мне нужно указать диапазон, потому что в некоторых ячейках менять ту же самую часть формулы не надо |
как же мне было понять, если вы об этом не говорили? |
|
4vaker Пользователь Сообщений: 26 |
Вот, пожалста. |
JayBhagavan Пользователь Сообщений: 11833 ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64 |
4vaker, формируйте пути через сцепку текстовых констант с переменной частью. Конкретней не скажу. В примере не показано что есть, а что надо получить. Хотя прочтение правил сэкономило бы Ваше время и время помогающих. ДобРа. <#0> |
4vaker Пользователь Сообщений: 26 |
Нужно из столба «Е» сделать столб «Х». |
JayBhagavan Пользователь Сообщений: 11833 ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64 |
#28 21.08.2014 11:01:10 Замените:
на
<#0> |
||||
Максим Зеленский Пользователь Сообщений: 4646 Microsoft MVP |
#29 21.08.2014 11:38:37 вообще-то там код подсвечен красным из-за несоблюдения синтаксиса. Если вам надо изменить строку, которая содержит кавычки, то ее надо тогда прописать так:
только макрос ничего не меняет, так как нет гиперссылок в ячейках.
F1 творит чудеса |
|||
4vaker Пользователь Сообщений: 26 |
#30 21.08.2014 13:00:39 Кажется я не с того начал. Значит давайте сначала. Изменено: 4vaker — 21.08.2014 13:12:07 |
@Qairat
frontend developer, angular 2+
Всем Привет!
Такая ситуация. Есть такой файл:
И везде на гипперссылках написано слово parsing/Licenses/Details/и свое значение.
Теперь мне надо поменять там слово parsing на другое слово.
Как можно сделать сразу везде?
Помогите.
Там более 20 тысяч строк.
-
Вопрос заданболее трёх лет назад
-
2262 просмотра
Alt+F11
Sub FixLinks()
Dim hLink As Hyperlink
Dim sOld As String
Dim sNew As String
sOld = "http://parsing"
sNew = "http://newsite"
For Each hLink In ActiveSheet.Hyperlinks
hLink.Address = Replace(hLink.Address, sOld, sNew)
Next hLink
End Sub
выполнить
Пригласить эксперта
-
Показать ещё
Загружается…
14 апр. 2023, в 04:52
5000 руб./за проект
14 апр. 2023, в 01:55
1000 руб./в час
13 апр. 2023, в 23:50
3000 руб./за проект
Минуточку внимания
В этой статье я покажу как можно быстро и качественно изменить адреса гиперссылок на листе Excel.
Существуют ситуации, когда на листе есть много гиперссылок(если еще на знакомы с гиперссылками на различные папки или интернет ресурсы. И иногда случаются ситуации когда адреса этих гиперссылок надо поменять. Как правило это происходит если либо домен сменился, либо на сервере добавилась директория и эти изменения надо отразить в гиперссылках, либо все просто было перемещено в другую папку. Для примера возьмем такие исходные данные: надо заменить текст ссылки <f-с1>.excel_vba</f-с1> на текст <f-с2>excel-vba</f-с2>.
Прежде чем начать замену необходимо еще определить каким способом установлена гиперссылка. Если установлена через формулу ГИПЕРССЫЛКА, то все просто:
- выделяем диапазон с гиперссылками;
- жмем Ctrl+H.
- Найти: <f-с1>.excel_vba</f-с1>
- Заменить на: <f-с2>excel-vba</f-с2>
- Жмем кнопочку «Параметры» и устанавливаем Область поиска — Формулы и снимаем галочку «Ячейка целиком«
- Жмем «Заменить все«
Теперь адреса ссылок должны поменяться.
Все гораздо сложнее, если гиперссылки были созданы через стандартное меню:
правый клик мыши на ячейке — Гиперссылка. Тут фокус с заменой через Ctrl+H не пройдет. В таких случаях придется прибегнуть к помощи VBA(Visual Basic for Applications) или как чаще называют эти коды — макросы. Текст такого макроса:
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 (или создаем кнопку для вызова макроса на листе)
- в первом диалоговом окне указываем какой текст заменить
- во втором диалоговом окне на что заменить указанный в первом окне текст
Гиперссылки всех объектов на листе будут изменены. Если у объекта нет гиперссылки — объект будет пропущен.
Чтобы заменить гиперссылки только в выделенных объектах необходимо строку
For Each oSh In ActiveSheet.Shapes
заменить на такую:
For Each oSh In Selection.ShapeRange
тогда надо будет выделить объекты на листе, для которых необходимо заменить гиперссылки, и запустить макрос.
Скачать пример: Пример замены гиперссылок.xls (58,0 KiB, 8 817 скачиваний)
За материал поклон Дмитрию: https://www.excel-vba.ru/chto-umeet-excel/kak-massovo-izmenit-giperssylki/
Join @AdmNtsRu on Telegram