Создание гиперссылки в VBA Excel методом Hyperlinks.Add для перехода на другой лист, на интернет-сайт, для открытия любого файла в программе по умолчанию.
Метод Hyperlinks.Add
Синтаксис
1 |
Expression.Add (Anchor, Address, SubAddress, ScreenTip, TextToDisplay) |
Expression — выражение (переменная), возвращающее объект Hyperlinks.
Параметры
Параметр | Описание |
---|---|
Anchor | Объект Range или объект Shape, к которому привязывается (добавляется) новая гиперссылка. Обязательный параметр. Тип данных — Object. |
Address | Адрес гиперссылки. Обязательный параметр. Тип данных — String. |
SubAddress | Субадрес гиперссылки. Необязательный параметр. Тип данных — Variant. |
ScreenTip | Всплывающая подсказка, отображаемая при наведении указателя мыши на текст гиперссылки. Необязательный параметр. Тип данных — Variant. |
TextToDisplay | Текст гиперссылки. Необязательный параметр. Тип данных — Variant. |
Если текст гиперссылки (TextToDisplay) не указан, будет отображен текст параметров Address и SubAddress.
Создание гиперссылок
Гиперссылка на другой лист
Создание гиперссылки на рабочий лист другой книги:
1 2 |
ActiveSheet.Hyperlinks.Add Anchor:=Range("A4"), Address:="C:\Users\Evgeniy\Desktop\Книга2.xlsx", _ SubAddress:="Лист3!D5", ScreenTip:="Гиперссылка на Лист3!D5 в Книга2", TextToDisplay:="Книга2 - Лист3!D5" |
Создание гиперссылки на другой лист текущей книги:
1 2 |
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", _ SubAddress:="Лист4!D6", TextToDisplay:="Эта книга - Лист4!D6" |
Создание гиперссылки на другую ячейку того же листа:
1 2 |
Worksheets("Лист1").Hyperlinks.Add Anchor:=Range("A1"), Address:="", _ SubAddress:="Лист1!D6", TextToDisplay:="Перейти к D6" |
Гиперссылка на любой файл
Создание гиперссылки на документ Word:
1 2 |
ActiveSheet.Hyperlinks.Add Anchor:=Range("A1"), Address:="C:\Users\Evgeniy\Documents\Документ 1.docx", _ TextToDisplay:="Ссылка на Документ 1" |
Создание гиперссылки на точечный рисунок:
1 2 |
ActiveSheet.Hyperlinks.Add Anchor:=Range("A1"), Address:="C:\Users\Evgeniy\Documents\Рисунок 1.bmp", _ TextToDisplay:="Ссылка на Рисунок 1" |
Гиперссылка на интернет-сайт
Пример добавления гиперссылки на рубрику «VBA Excel» сайта «Время не ждёт»:
1 2 |
ActiveSheet.Hyperlinks.Add Anchor:=Range("A1"), Address:="https://vremya-ne-zhdet.ru/category/vba-excel/", _ TextToDisplay:="Рубрика VBA Excel" |
Поиск гиперссылок в диапазоне
Поиск первой ячейки с гиперссылкой в заданном диапазоне:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Sub Primer() Dim myRange As Range, n As Integer, i As Integer, s As String 'Задаем диапазон поиска Set myRange = Range("A1:G10") 'Вычисляем количество ячеек в заданном диапазоне n = myRange.Cells.Count 'Ищем первую ячейку с гиперссылкой For i = 1 To n If myRange.Cells(i).Hyperlinks.Count > 0 Then s = myRange.Cells(i).Address Exit For End If Next MsgBox s End Sub |
Для поиска последней ячейки с гиперссылкой в заданном диапазоне следует заменить строку
For i = 1 To n
на
For i = n To 1 Step -1
.
Здравствуйте, Евгений.
Подскажите пожалуйста, как можно определить адрес ячейки, которая содержит гиперссылку? А если ячеек с гиперссылками несколько, то как определить адрес последней (нижней правой) из них?
Здравствуйте, Юрий!
Ответ добавил в конец статьи.
Добрый день!
Скажите, пожалуйста, как сделать, чтобы в переменную Address:= вставлять не конкретный адрес, а скопированную ссылку из буфера обмена?
Заранее спасибо!
Решил проблему вот так вот:
Добрый день!
У меня в очередной раз «зачудила» книга Excell. Сама поменяла родные адреса гиперссылок в Инет во многих ячейках на один, которые понравившейся ей, меняя лишь концовку 1649, 1650, …. .
В отладчике VBA вышел на этот список подмены:
Range("L10"). Hyperlinks.Items 1.Formyla[1…5]
содержащий 5 вставляемых ею адресов. В VBA не удалось добраться до этих формул.Скажите, пожалуйста, можно ли программно восстановить стоящие ранее адреса? И как это сделать? И можно ли ей запретить так своевольничать?
Здравствуйте, Павел!
Я не знаю, как восстановить предыдущую версию файла Excel. Есть что-то у разработчиков, но это не программно.
Код, который перезаписывает гиперссылки, поищите в модулях книги и листа. Процедуры, размещенные в этих модулях, могут запускаться самостоятельно при совершении определенных событий, к которым они привязаны.
Здравствуйте, Евгений!
Спасибо за ответ. Отрицательный ответ, когда книга шибко нужна, лишь стимулирует поиск решения. Буду делать ей “костыли”, гиперссылки превращу в обычный текст и, как лучший вариант, хотел бы запускать их программно без привязки к конкретной ячейке конкретного листа конкретной книги.
Скажите, пожалуйста, есть ли возможность программно запускать гиперссылку на открытие страницы в Инете? Без привязки к конкретной ячейке.
Здравствуйте, Павел!
Открыть страницу сайта можно методом FollowHyperlink. Этот метод может не работать в старых версиях Excel.
Здравствуйте, Евгений!
Спасибо за ответ. Предложенный Вами метод работает в моей версии.
Добрый день!
Может мне кто-нибудь подсказать в чем ошибка в коде.
Задумка такая есть две зависимые/независимые книги. (они обновляют данные посредством извлечения оных друг из друга)
В общем то это производится посредством макроса который создает массив в который записываются данные из «книги 1», а после из массива данные попадают в «книгу 2».
ПРОБЛЕМА в том, что таким образом извлекаются только данные в ячейках (текст), но в одной колонке содержатся гиперссылки поверх текста. И их мне тоже надо извлечь для копирования в другую книгу. Собственно это реализовано через массив в который записываются в качестве String адреса гиперссылок извлеченные через Hyperlink.Address.
Проблем с извлечением данных адресов и записи их в массив не было. Они возникли на моменте присвоения ячейкам(заполненным) гиперссылки.
Это запись в массив адресов:
Компилятор выдает мне ошибку на фрагменте присвоения адреса — Address:=UA
Можно разъяснить почему не работает такая текстовка?
Worksheets(2).Hyperlinks.Add Anchor:=Range("A1"), Address:="https://vremya-ne-zhdet.ru/category/vba-excel/", ScreenTip:="тест", TextToDisplay:="Рубрика VBA Excel"
Если мне не важен активный лист, нужно всегда на 2 листе была гиперссылка? Но эта формула только в активный лист?
Здравствуйте, Андрей!
Вы указываете ячейку на активном листе. Замените
Anchor:=Range("A1")
наAnchor:=Worksheets(2).Range("A1")
.Обсуждение закрыто.