Иногда требуется заменить на листе все гиперссылки, созданные при помощи функции листа =ГИПЕРССЫЛКА(), на обычные гиперссылки.
В этом поможет VBA-функция FormulaHyperlink, и основанный на ней макрос:
Function FormulaHyperlink(ByRef cell As Range) As String If cell.HasFormula And (cell.Hyperlinks.Count = 0) Then If cell.Formula Like "=HYPERLINK*" Then FormulaHyperlink = Evaluate(Mid$(Split(cell.Formula, ",")(0), 12)) End If End If End Function
Выделите диапазон ячеек, и запустите этот макрос (не забыв добавить ниже его функцию FormulaHyperlink)
Sub ЗаменаГиперссылокСформуламиНаОбычныеВВыделенномДиапазоне() Dim cell As Range: Application.ScreenUpdating = False For Each cell In Selection ' перебираем все выделенные ячейки addr$ = FormulaHyperlink(cell) ' берем ссылку из формулы If Len(addr$) Then ' если ссылка есть, то cell.Value = cell.Value ' заменяем формулу значением cell.Hyperlinks.Add cell, addr$ ' заново прописываем гиперссылку End If Next cell End Sub
А этот макрос заменит все гиперссылки в 3-м столбце активного листа:
(пример - в прикреплённом файле)
Sub ЗаменаГиперссылокСформуламиНаОбычные() Dim cell As Range, ra As Range: Application.ScreenUpdating = False Set ra = Range([c1], Range("c" & Rows.Count).End(xlUp)) For Each cell In ra.Cells addr$ = FormulaHyperlink(cell) If Len(addr$) Then cell.Value = cell.Value cell.Hyperlinks.Add cell, addr$ End If Next cell End Sub
Комментарии
Игорь, добрый день!
По какой-то причине, FormulaHyperlink() возвращает пустую строку, если путь содержит символ "," (comma).
=HYPERLINK("\\aa.aa\AAA\substr1, substr2\0a.0.a=a01 [aa]"; "ссылка")
При запуске макроса ЗаменаГФОВДиапазоне() возвращается ошибка `Run time 13`
Прошу помочь и подсказать, какое необходимо добавить условие, чтобы формула не спотыкалась на запятой?
Игорь, добрый день!
По какой-то причине, FormulaHyperlink() возвращает пустую строку, если путь содержит символ "," (comma).
=HYPERLINK("\\aa.aa\AAA\substr1, substr2\0a.0.a=a01 [aa]"; "
какие ссылки? формульные?
массив = range("a1:g10").formulaR1C1
потом обрабатываете формулы для извлечения ссылки
а если ссылки обычные, не формулой сделанные, - то никак
А не подскажите как в массиве достать ссылки.
Благодарю
Нет, с массивом не работает
Для простановки гиперссылок, необходимо перебирать ячейки в цикле
От того, что вы в двумерном массиве обработаете формулы, - ссылки в ячейках не появятся же..
Добрый день.
А эта функция работает с двумерными массивами? Если да то как указать синтаксис без For Each cell In Selection? Спасибо
Спасибо за ответ!
Уже победил, вот так:
Здравстсвуйте, Олег.
Посмотрел ваш файл. А что там и как должно работать?
Макрос обрабатывает ссылки только в третьем столбце.
В этом столбце (в вашем файле) все гиперссылки - обычные, нет ни одной «формульной» гиперссылки
(либо там изначально не было гиперссылок на формулах, либо макрос их уже обработал)
А то, что полученные гиперссылки не работают - так они и не будут работать, ибо они взяты с сайта «как есть»,
т.е. в относительном формате (например, ссылка /catalog/detail.php?SECTION_ID=160&ELEMENT_ID=1187&ORDER=Y)
Адрес сайта не указан - потому ссылки не работают (и до обработки макросом не работали)
Впечатление такое, что вам нужен совсем не этот макрос.
А чего вы пытаетесь добиться в своем файле, - вы предпочли умолчать)
Добрый день!
Не срабатывает макрос. Подставил свои ссылки в ваш файл.
narod.ru/disk/62923877001.c6801cb79c5de501b2f9e332399e55c7/Hyperlinks.xlsm.html
Здравствуйте, Виталий.
Способа перейти по такой гиперссылке без помощи мыша я не знаю (если, конечно, если не запустить встроенное средство Windows для управления курсором при помощи клавиатуры)
Зато макросом - это можно запросто сделать:
Ну или предварительно замените «формульные» гиперссылки на «обычные»:
http://excelvba.ru/code/FormulaHyperlinks
Здравствуйте!
Меня зовут Виталий.
Буте добры подскажите каким образом можно перейти по гиперссылке написанной формулой =ГИПЕРССЫЛКА() без помощи мышки , используя клавиатуру или макрос.
Отправить комментарий