Я использовал функцию Concatenate для соединения ссылок, как это:

Column 1: http://twitter.com/
Column 2: username
Column 3: http://twitter.com/username

Я на самом деле написал функцию так:

=hyperlink(CONCATENATE(cell1,cell2))

И теперь он показывает все ячейки в виде ссылок. Затем я обратился к Visual Basic и добавил следующий модуль (который позволяет открывать несколько ссылок одновременно):

Sub Hyperlink_Follow()
For Each c In Selection
On Error Resume Next
c.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
Next
End Sub

Далее я выбрал ссылки и запустил макросы, но ничего не произошло.

Если вы выполните описанные выше шаги и запустите ссылки, например:

http://google.com
http://twitter.com
http://reddit.com

Работает нормально. Проблема связана со связанными ссылками.

Есть идеи почему? Обойти это?

1 ответ1

1

Из того, что я могу сказать, это терпит неудачу, потому что гиперссылки, созданные с помощью функции HYPERLINKS Excel, не включаются в коллекцию HYPERLINKS VBA для ячейки. Попробуйте использовать Debug.Print c.Hyperlinks(1).Address и обратите внимание, что он не печатает URL для ячеек, формально создающих гиперссылку. Это дополнительно подтверждается попыткой редактировать гиперссылку в Excel. Если щелкнуть правой кнопкой мыши ячейку с помощью функции HYPERLINK вас будет только опция "Удалить гиперссылку", а щелчок по ней ничего не даст. Обычная гиперссылка позволяет редактировать, открывать или удалять ее.

Вот обходной путь, который сначала пытается вытащить HYPERLINK(1).ADDRESS значение и, в случае неудачи, вместо этого извлекает текстовое значение ячейки. Обратите внимание, что это не сработает, если вы используете параметр friendly_name в формуле HYPERLINK поскольку вместо этого он будет считываться как значение ячейки.

Sub Hyperlink_Follow()
    Dim c As Range
    Dim url As String
    For Each c In Selection.Cells
        url = ""
        On Error Resume Next
        url = c.Hyperlinks(1).Address
        If url = "" Then url = c.Value
        ThisWorkbook.FollowHyperlink url
        Application.Wait Now() + TimeValue("00:00:03")
    Next
End Sub

Обратите внимание, что я также добавил трехсекундную паузу между каждым URL-адресом, поскольку обнаружил, что открытие слишком большого количества сразу приводит к перезаписи последнего созданного окна вместо создания нового. Это может быть просто потому, что я работаю над IE. Вы можете проверить это и удалить его, если он не нужен.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .