Этот макрос позволяет открыть в браузере все гиперссылки из выделенного диапазона ячеек.
Зачем нужен такой макрос, если можно щелкнуть на гиперссылке, и она так же откроется в браузере?
- Некоторые гиперссылки могут быть неактивными, то есть в ячейку просто введен текст, содержащий ссылку
В этом случае придется вручную копировать содержимое ячейки, и вставлять в браузер - Гиперссылок может быть много, и щелкать на каждой из них — долго
- Некоторые гиперссылки не открываются в браузере, и 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
Комментарии
Спасибо! все отлично работает
замените строку
на
Добрый день! Вопрос по данному макросу, можно ли его как-то допилить? Т.к. с простыми ссылками все работает отлично, но если в какой-либо ячейке из которых формируется итоговая ссылка встречается пробел, то такая ссылка получается для макроса неполной, необходимо как-то проверять этот символ пробела на наличие символов после него, и если они есть, то заменять такой пробел, как браузер в адресной строке, символом %20, чтобы итоговая ссылка получилась полной.
Понял,спасибо
Я за такое не возьмусь, скорее всего (там надо делать под конкретный браузер, потом ещё обновлять файл драйвера браузера время от времени)
По цене, если делать, от 5000 руб
Какова цена вопроса-усложнения макроса?
Игорь, простыми способами это не сделать (можно, но потребуется установка дополнительного ПО, и макрос станет сложнее в 10 раз)
Макрос отлично работает и на 2007 Экселе ,и на 2016.Вот вопрос, а можно или есть возможность доработать его так чтобы - после того как открылись вкладки ,на каждой вкладке ещё открылся бы просмотр кода(inspect)?
Отправить комментарий