Макрос открытия гиперссылок в браузере

Этот макрос позволяет открыть в браузере все гиперссылки из выделенного диапазона ячеек.

Зачем нужен такой макрос, если можно щелкнуть на гиперссылке, и она так же откроется в браузере?

  • Некоторые гиперссылки могут быть неактивными, то есть в ячейку просто введен текст, содержащий ссылку
    В этом случае придется вручную копировать содержимое ячейки, и вставлять в браузер
  • Гиперссылок может быть много, и щелкать на каждой из них — долго
  • Некоторые гиперссылки не открываются в браузере, и Excel выдаёт ошибку.
    Причина этого: Excel сначала сам прогружает ссылку, и только если ему удалось прогрузить страницу, только после этого он отправляет её в браузер. Мало того что это иногда сильно увеличивает время открытия ссылок, так иногда и не даёт открыть некоторые рабочие ссылки, где на сайте нужна авторизация (или если ссылка не открывается в Internet Explorer, но открывается в современном браузере)

Скопируйте нижеприведённый код в свой файл Excel, а назначьте кнопке или комбинации клавиш макрос OpenHyperlinksInBrowser:

Sub OpenHyperlinksInBrowser()
    ' макрос открытия гиперссылок в браузере по умолчанию
    ' © 2022 ExcelVBA.ru
    On Error Resume Next
    Dim hl$, coll As New Collection, msg$, cell As Range, link, i&, cellValue$
 
    ' перебираем все непустые ячейки
    For Each cell In Intersect(ActiveSheet.UsedRange, Selection).Cells
        If Len(cell) Then
            ' считываем гиперссылку из ячейки
            hl$ = "": hl$ = GetCellHyperlinkAddress(cell, True)
 
            For i = 1 To 2000
                DoEvents ' пауза
            Next
            If hl$ Like "http*://?*.?*" Then coll.Add hl$
            If coll.Count > 20 Then Exit For ' ограничение на максимум 20 гиперссылок
        End If
    Next cell
 
    If coll.Count > 6 Then ' если выделено много ссылок - запрашиваем подтверждение
        msg$ = "Уверены, что хотите открыть в браузере сразу " & coll.Count & " ссылок?"
        If MsgBox(msg$, vbDefaultButton2 + vbOKCancel) = vbCancel Then Exit Sub
    End If
 
    For Each link In coll ' перебираем найденные ссылки
        CreateObject("WScript.Shell").Run link ' открываем ссылку link в браузере по умолчанию
    Next
End Sub
 
Function GetCellHyperlinkAddress(ByRef cell As Range, Optional AllowInactiveURL As Boolean = False) As String
    ' функция извлечения гиперссылки из ячейки
    ' поддерживаются активные и неактивные ссылки, и также формульные гиперссылки
    On Error Resume Next
    Dim v$
    With cell.MergeArea.Hyperlinks(1)
        GetCellHyperlinkAddress = .Address
        If Len(GetCellHyperlinkAddress) Then
            If Len(.SubAddress) Then GetCellHyperlinkAddress = GetCellHyperlinkAddress & "#" & .SubAddress
            Exit Function
        End If
    End With
    If AllowInactiveURL Then v$ = cell.Value: If InStr(1, v$, "://") > 0 Then If v$ Like "http*://?*.?*" Then GetCellHyperlinkAddress = v$: Exit Function
 
    Dim txt$, Brackets&, Quotes&, i&
    If GetCellHyperlinkAddress = "" Then
        If cell.Formula Like "=HYPERLINK*" Then
            txt$ = Mid$(cell.Formula, 12)
            txt$ = Left(txt, Len(txt) - 1)
            For i& = 1 To Len(txt)
                Select Case Mid(txt, i, 1)
                    Case "(": Brackets& = Brackets& + 1
                    Case ")": Brackets& = Brackets& - 1
                    Case """": Quotes& = Quotes& + 1
                    Case ","
                        If (Brackets& = 0) And (Quotes& Mod 2 = 0) Then
                            txt = Left(txt, i - 1)
                            Exit For
                        End If
                End Select
            Next
            GetCellHyperlinkAddress = Evaluate(txt)
        End If
    End If
    Err.Clear
End Function

Комментарии

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Спасибо! все отлично работает

замените строку

hl$ = "": hl$ = GetCellHyperlinkAddress(cell, True)

на
hl$ = "": hl$ = Replace(GetCellHyperlinkAddress(cell, True)," ","%20")

Добрый день! Вопрос по данному макросу, можно ли его как-то допилить? Т.к. с простыми ссылками все работает отлично, но если в какой-либо ячейке из которых формируется итоговая ссылка встречается пробел, то такая ссылка получается для макроса неполной, необходимо как-то проверять этот символ пробела на наличие символов после него, и если они есть, то заменять такой пробел, как браузер в адресной строке, символом %20, чтобы итоговая ссылка получилась полной.

Понял,спасибо

Я за такое не возьмусь, скорее всего (там надо делать под конкретный браузер, потом ещё обновлять файл драйвера браузера время от времени)
По цене, если делать, от 5000 руб

Какова цена вопроса-усложнения макроса?

Игорь, простыми способами это не сделать (можно, но потребуется установка дополнительного ПО, и макрос станет сложнее в 10 раз)

Макрос отлично работает и на 2007 Экселе ,и на 2016.Вот вопрос, а можно или есть возможность доработать его так чтобы - после того как открылись вкладки ,на каждой вкладке ещё открылся бы просмотр кода(inspect)?

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
CAPTCHA
Подтвердите, пожалуйста, что вы - человек:
  _    ___    __  __       _             _ 
| | ( _ ) | \/ | __| | __ _ (_)
| | / _ \ | |\/| | / _` | / _` | | |
| | | (_) | | | | | | (_| | | (_| | | |
|_| \___/ |_| |_| \__,_| \__, | _/ |
|_| |__/
Введите код, изображенный в стиле ASCII-арт.

Не получается применить макрос? Не удаётся изменить код под свои нужды?

Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.