Открытие сайта методом Workbook.FollowHyperlink с помощью кода VBA Excel. Сокращенный синтаксис метода, примеры использования.
Метод Workbook.FollowHyperlink
FollowHyperlink – это метод объекта Workbook, позволяющий открыть сайт по указанному адресу в браузере, использующемуся по умолчанию.
Метод Workbook.FollowHyperlink предназначен для более широкого использования в VBA Excel, чем просто открытие сайтов. С полным описанием и всеми параметрами метода вы можете ознакомиться на сайте разработчика.
В этой же статье мы рассмотрим сокращенный синтаксис метода Workbook.FollowHyperlink с одним аргументом: адрес сайта.
Сокращенный синтаксис метода
Сокращенный синтаксис метода Workbook.FollowHyperlink представлен в VBA Excel двумя равнозначными вариантами:
Вариант 1
ThisWorkbook.FollowHyperlink Address:=«http://imya-sayta.ru/» |
Вариант 2
ThisWorkbook.FollowHyperlink («http://imya-sayta.ru/») |
Примечания
1. Для сайтов на защищенном протоколе «https» можно указывать протокол «http», так как у защищенных сайтов есть переадресация с «http» на «https».
2. Если сайт по указанному адресу не существует, будет сгенерирована ошибка.
Примеры использования
Пример 1
Открытие сайта нажатием элемента управления Label на пользовательской форме VBA Excel:
‘Записываем адрес сайта ‘в заголовок метки Label1 Private Sub UserForm_Initialize() With Label1 .Caption = «http://imya-sayta.ru/» .Font.Size = 10 .Font.Underline = True End With End Sub ‘Переходим по гиперссылке ‘при нажатии на метку Label1 Private Sub Label1_Click() On Error Resume Next ThisWorkbook.FollowHyperlink _ Address:=Label1.Caption End Sub |
Выражение On Error Resume Next
необходимо, чтобы корректно завершить процедуру при возникновении ошибки, когда указанный сайт не существует. Если хотите вывести сообщение об ошибке, используйте простой обработчик ошибок с оператором On Error GoTo
.
Пример 2
Пример выбора сайта с помощью элемента управления ComboBox с автоматическим открытием гиперссылки и обработчиком ошибок:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
‘Записываем адреса сайтов ‘в комбинированный список Private Sub UserForm_Initialize() With ComboBox1 .AddItem «http://sayt-1.ru/» .AddItem «http://sayt-2.ru/» .AddItem «http://sayt-3.ru/» .AddItem «http://sayt-4.ru/» .AddItem «http://sayt-5.ru/» End With End Sub ‘Переходим по гиперссылке ‘при выборе сайта в списке Private Sub ComboBox1_Change() On Error GoTo Stroka ThisWorkbook.FollowHyperlink _ Address:=ComboBox1.Value Exit Sub Stroka: If Err.Description <> «» Then MsgBox «Произошла ошибка: « _ & Err.Description End If End Sub |
Так как в списке из примера перечислены несуществующие сайты, при выборе одного из них, обработчик ошибок выведет следующее сообщение:
If you want a more robust solution with ShellExecute that will open ANY file, folder or URL using the default OS associated program to do so, here is a function taken from http://access.mvps.org/access/api/api0018.htm:
'************ Code Start **********
' This code was originally written by Dev Ashish.
' It is not to be altered or distributed,
' except as part of an application.
' You are free to use it in any application,
' provided the copyright notice is left unchanged.
'
' Code Courtesy of
' Dev Ashish
'
Private Declare Function apiShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" _
(ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) _
As Long
'***App Window Constants***
Public Const WIN_NORMAL = 1 'Open Normal
Public Const WIN_MAX = 3 'Open Maximized
Public Const WIN_MIN = 2 'Open Minimized
'***Error Codes***
Private Const ERROR_SUCCESS = 32&
Private Const ERROR_NO_ASSOC = 31&
Private Const ERROR_OUT_OF_MEM = 0&
Private Const ERROR_FILE_NOT_FOUND = 2&
Private Const ERROR_PATH_NOT_FOUND = 3&
Private Const ERROR_BAD_FORMAT = 11&
'***************Usage Examples***********************
'Open a folder: ?fHandleFile("C:TEMP",WIN_NORMAL)
'Call Email app: ?fHandleFile("mailto:dash10@hotmail.com",WIN_NORMAL)
'Open URL: ?fHandleFile("http://home.att.net/~dashish", WIN_NORMAL)
'Handle Unknown extensions (call Open With Dialog):
' ?fHandleFile("C:TEMPTestThis",Win_Normal)
'Start Access instance:
' ?fHandleFile("I:mdbsCodeNStuff.mdb", Win_NORMAL)
'****************************************************
Function fHandleFile(stFile As String, lShowHow As Long)
Dim lRet As Long, varTaskID As Variant
Dim stRet As String
'First try ShellExecute
lRet = apiShellExecute(hWndAccessApp, vbNullString, _
stFile, vbNullString, vbNullString, lShowHow)
If lRet > ERROR_SUCCESS Then
stRet = vbNullString
lRet = -1
Else
Select Case lRet
Case ERROR_NO_ASSOC:
'Try the OpenWith dialog
varTaskID = Shell("rundll32.exe shell32.dll,OpenAs_RunDLL " _
& stFile, WIN_NORMAL)
lRet = (varTaskID <> 0)
Case ERROR_OUT_OF_MEM:
stRet = "Error: Out of Memory/Resources. Couldn't Execute!"
Case ERROR_FILE_NOT_FOUND:
stRet = "Error: File not found. Couldn't Execute!"
Case ERROR_PATH_NOT_FOUND:
stRet = "Error: Path not found. Couldn't Execute!"
Case ERROR_BAD_FORMAT:
stRet = "Error: Bad File Format. Couldn't Execute!"
Case Else:
End Select
End If
fHandleFile = lRet & _
IIf(stRet = "", vbNullString, ", " & stRet)
End Function
'************ Code End **********
Just put this into a separate module and call fHandleFile() with the right parameters.
Rigel44 Пользователь Сообщений: 69 |
Добрый день! Все решения по открыванию интернет-сайта по ссылке через VBA, которые я видел, открывают его в Internet Explorer. Ни для кого не секрет, что он загибается. Как открыть ссылку браузером по умолчанию или хотя бы MS Edge? Спасибо! |
Dima S Пользователь Сообщений: 2063 |
что вы подразумеваете под «открыванием интернет-сайта по ссылке через VBA»? |
Rigel44 Пользователь Сообщений: 69 |
Dima S, имею в виду открыть сайт в браузере Изменено: Rigel44 — 21.06.2020 23:14:38 |
Rigel44 Пользователь Сообщений: 69 |
#4 21.06.2020 23:16:54 Сам отвечу на свой вопрос. Нашел на просторах интернета: https://www.devhut.net/2018/02/01/vba-open-a-url-in-firefox-chrome/ Вроде работает, но может можно как-то попроще?
Изменено: Rigel44 — 21.06.2020 23:19:14 |
||
bedvit Пользователь Сообщений: 2477 Виталий |
Через Shell не взлетает? «Бритва Оккама» или «Принцип Калашникова»? |
Александр Моторин Пользователь Сообщений: 958 |
#6 21.06.2020 23:40:13
|
||
Rigel44 Пользователь Сообщений: 69 |
#7 21.06.2020 23:42:54 Александр Моторин, пробовал, у меня ничего не открывается, просто ничего не происходит. Что не так делаю?
|
||
Rigel44 Пользователь Сообщений: 69 |
Уточняю. У меня не работало, когда браузер по умолчанию ставил Яндекс.Браузер, с другими браузерами работает. Но что не так с Яндекс.Браузером? Есть ли способ программно узнать, какой браузер стоит по умолчанию? Изменено: Rigel44 — 22.06.2020 00:06:00 |
Игорь Пользователь Сообщений: 3631 |
#9 22.06.2020 01:09:46 Всё намного проще.
|
||
bedvit Пользователь Сообщений: 2477 Виталий |
Я же про это и писал. Игорь спасибо за реализацию. «Бритва Оккама» или «Принцип Калашникова»? |
Rigel44 Пользователь Сообщений: 69 |
Игорь, спасибо! Но еще раз повторюсь, метод работает не со всеми браузерами. При установке по умолчанию Яндекс.Браузер у меня выскакивает ошибка (прилагаю скрин). В других браузерах нормально, но все же, получается это не универсальное решение. Поэтому хочу программно узнать, какой браузер по умолчанию и если Яндекс — открывать, например, через Edge Изменено: Rigel44 — 22.06.2020 23:13:45 |
Игорь Пользователь Сообщений: 3631 |
Это не ошибка макроса Макрос делает то же самое, что вы сделали бы вручную, нажав в Windows в меню ПУСК пункт ВЫПОЛНИТЬ, вставив туда ссылку, и кликнув на ОК |
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#13 23.06.2020 07:44:52 Доброе время суток
Проверил варианты Windows RegKey — Default Browser Application Path . В Windows 10 правильно записан Edge, в Window 7 Chrome. По найденному в ProgId идентификатору приложения в ветке HKEY_CLASSES_ROOTChromeHTMLshellopencommand вполне себе указан путь к браузеру по умолчанию. Дерзайте. |
||
Андрей_26 Пользователь Сообщений: 647 |
|
Rigel44 Пользователь Сообщений: 69 |
Андрей VG, спасибо, это очень полезно! Но можно тупой вопрос, как залезть через VBA в произвольную ветвь реестра? Я умею только работать с ветвью VBA через GetSetting Изменено: Rigel44 — 23.06.2020 09:21:36 |
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#16 23.06.2020 10:04:46
Почитайте , там и другого полезного не мало. P. S. Медведь, а вот гранат не надо — палки будет достаточно |
||
Rigel44 Пользователь Сообщений: 69 |
#17 23.06.2020 22:21:03 Андрей VG, здорово! спасибо! Извините, снова вопросы. Почему вы написали ветку HKEY_CLASSES_ROOTChromeHTMLshellopencommand — у меня, например, Crome не установлен, поэтому и ветки такой нет. Да и почему в ветке хрома должен быть адрес браузера по умолчанию? Что-то похожее нашел вот в этой ветке:
Значение переменной ProgId: YandexHTML.44X6GKC2M3EKCRFCQB634HVWGE |
||
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#18 23.06.2020 22:48:26
Правильно ли я понимаю, что статью по ссылке вы не читали? Так как именно там указывалось посмотреть progId браузера по умолчанию в найденной вами ветке. Забавно Изменено: Андрей VG — 23.06.2020 23:16:25 |
||
Rigel44 Пользователь Сообщений: 69 |
Андрей VG, да, видимо поторопился. спасибо. |
RAN Пользователь Сообщений: 7091 |
#20 24.06.2020 17:44:11 Который день не могу понять, чем обычное
не подходит? |
||
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#21 24.06.2020 17:48:24
А помучаться? А записать куда-нибудь что-нибудь,. чтобы всё пропало?
Надеюсь точку восстановления перед этим сделали? Читать читал реестр и через WshShell и через WMI, а вот запись делал только штатными VBA WriteSettings, поэтому ничего сказать и посоветовать не могу. |
||||
Rigel44 Пользователь Сообщений: 69 |
#22 24.06.2020 20:45:04
Вот поэтому, у меня не работает: Прикрепленные файлы
|
||
Игорь Пользователь Сообщений: 3631 |
Вам уже второй простой проверенный код дали, из одной строки |
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
#24 24.06.2020 23:17:31 На всякий случай
|
||
Rigel44 Пользователь Сообщений: 69 |
#25 24.06.2020 23:31:02 Игорь, я переустанавливал браузер, ошибка не ушла. Поэтому сделал ее обход: если по умолчанию Яндекс, тогда запускается Edge, в остальных случаях по умолчанию. Я не знаю, проблема ли это моего компьютера или Яндекса, задача, чтобы сайт открывался, я ее решил. Всем спасибо за помощь! |
РАБОТА С ИНТЕРНЕТОМ ЧЕРЕЗ EXCEL VBA
23.06.2018 admin
0 Comment
VBA, Visual Basic
Сегодня расскажу Вам как работать с интернетом через VBA Excel.
Давайте перейдем в редактор кода Excel, для этого нажмите сочетание горячих клавиш Alt + F11 или через вкладку «просмотр кода». В открывшемся окне редактора через вкладку insert -> procedure добавим простую процедуру “Test” и нажмем ок.
Теперь нужно подключить специальный внешний компонент т.к. excel по умолчанию не умеет работать с удаленными серверами. Сам компонент представляет из себя файл библиотеку с расширением .dll (dynamic link library).
Чтобы добавить библиотеку нажмите на вкладку Tools -> References
В открывшемся окне найдите библиотеку с названием (Microsoft XML, v6.0). При установке windows данная библиотека устанавливается на Ваш компьютер автоматически. Проставьте галочку и нажмите ок.
Теперь внутри любой процедуры нам будет доступен класс XMLHTTP60. Внутри нашей процедуры напишем следующее выражение.
Public Sub Test()
Dim xhr As New XMLHTTP60
End Sub
Вообще данный класс XMLHTTP60 в большинстве случаев известен как XmlHttpRequest, используется сегодня в разработке современных веб приложений, которые модно называют web 2.0 или Ajax. Однако сам класс довольно древний, впервые был разработан как не странно компанией Microsoft и работал уже в Internet Explorer 5. В те времена основным форматом обмена дынными был XML, поэтому в название класса присутствует xml хотя ничего общего c xml на сегодняшний день не имеет.
Давайте просто получим разметку странички google. Пока не очень полезно, но для примера сойдет.
В коде напишем следующий текст.
Public Sub Test()
Dim xhr As New XMLHTTP60
xhr.Open «GET», «https://google.com», False
xhr.send
Debug.Print xhr.responseText
End Sub
Если пример вернут ошибку 70, то вставьте другой адрес. Ошибка может быть связанна с механизмом безопасности google, потому просто проигнорируйте её и добавьте любой другой адрес, любимого сайта.
Запустим нажав на иконку run или клавишу F5
Как мы видим в окне immediate мы получили сырую разметку гугла.
Давайте откроем браузер. В области открытой страницы браузера нажмите правую кнопку мышки и выберете «Посмотреть код страницы»
В открывшейся вкладке мы увидим то, что получили через нашу среду разработки в Excel. Можете сравнить разметку, чтобы убедится в этом, но я не рекомендую терять время.
Теперь давайте пробежимся по строчкам нашего кода.
Сначала мы объявляем переменную xhr и стразу инициализируем её через ключевое слово new. Если не совсем понятно, как работает данная строчка, то посмотрите уроки по объектам в Excel ссылка в описание.
Далее мы обязательно должны указать основные параметры через метод Open
Первый параметр — это глагол запросов протокола http. Официально их не много около 8 штук, могут быть и пользовательские. Но сейчас достаточно запомнить два часто употребляемых глагола GET и POST (более подробно сюда)
Второй параметр – это адрес веб ресурса, тут всё ясно.
Третий параметр – это указатель на… хотя просто запомните, что сюда ставится false))
Потом мы просто вызываем удаленный сервер методом send
Наша программа на некоторое время зависает т.к. ожидает ответа от сервера, возможно вы не почувствуете этого. Но если Ваш интернет слабый Вы можете долго ожидать ответа до тех пор, пока не вылети таймаут.
Свойство responseText содержит все данные которые вернул сервер, обычно это текстовый формат.
Необходимо добавить, что если всё хорошо и удаленный сервер работает верно, то сервер вместе с текстом или телом ответа, возвращает код ответа.
Если всё хорошо, то код ответа начинается с цифры 200 (201, 202, 203, 204, 205, 206) (код ответов можно посмотреть тут (http://lib.ru/WEBMASTER/rfc2068/))
Однако бывает такое, что удаленный ресурс отработал неверно. Скорее всего сервер в таком случае вернет ошибку с кодом ответа начинающуюся с цифры 400, например, знаменитую ошибку 404 (страница не найдена) или 500 (ошибка сервера).
Чтобы проверить, что сервер отработал верно и вернул нам то, что надо проверим код ошибки.
Изменим на следующий блок кода.
Public Sub Test()
Dim xhr As New XMLHTTP60
xhr.Open «GET», «https://google.com», False
xhr.send
If xhr.Status = 200 Then ‘If xhr.Status >= 200 And xhr.Status < 300 Then
Debug.Print xhr.responseText
Else
Debug.Print xhr.responseText
End If
End Sub
В комментариях я указал более надежный способ проверки положительного ответа от сервера всё что выше 200, но ниже 300 считается ок.
Очистите окно Immediate
Нажмите F5 или иконку старт.
Мы видим, что всё тоже самое ответ пришел верный.
Чтобы проверить блок else давайте в адрес добавим что-то неправильное, например, восклицательные знаки https://google.com/!!
Нажмите F5 или иконку старт.
В окне Immediate уже пришла страничка с ошибкой.
Таким образом можно обращается к серверу через VBA Excel
Я рекомендую нажать клавишу F8 чтобы по шагам прогрессировать программу и посмотреть каждый шаг.
How to open a website in the browser from Excel using a Macro and VBA.
This is the same as following a link or clicking a link from the worksheet except that it will be done through a Macro.
This does not open a website within Excel. Everything will still open in the browser.
The Macro
Here is the full macro that you need:
Sub Go_to_Website()
Dim ie As Object
Set ie = CreateObject("INTERNETEXPLORER.APPLICATION")
ie.NAVIGATE "http://www.google.com"
ie.Visible = True
While ie.busy
DoEvents
Wend
End Sub
This is a simple macro and it will open the website into Internet Explorer by default.
To use the macro, change http://www.google.com to whatever website you want the user to visit.
You can also replace this with a variable that holds the website url in order to make this a bit more versatile. In that case, you would just replace «http://www.google.com» with the desired variable name and without the double quotation marks around the variable name.
This is a fairly simple macro and you should not need to change anything other than what I just mentioned.
If you don’t know how to put this macro into Excel, you can read this tutorial here: Install a Macro into Excel
Make sure to download the sample file attached to this tutorial so you can get the macro ready to go in Excel.
Excel VBA Course — From Beginner to Expert
200+ Video Lessons
50+ Hours of Instruction
200+ Excel Guides
Become a master of VBA and Macros in Excel and learn how to automate all of your tasks in Excel with this online course. (No VBA experience required.)
View Course
Similar Content on TeachExcel
Open any Program from Excel
Macro: This free excel macro allows you to open any program on your computer from excel. You…
Login to a Website using a Macro
: Connect and login to a website using a macro in Excel.
This allows you to open a website a…
Open Microsoft Outlook from Excel
Macro: This free macro will open the Microsoft Outlook program on your computer. You do need…
Open Microsoft Word from Excel
Macro: This free macro will open the Microsoft Word program on your computer. You do need to have…
Open Microsoft PowerPoint from Excel
Macro: This free macro will open the Microsoft PowerPoint program on your computer. You do need t…
Make Users Enable Macros in Order to View a Workbook in Excel
Tutorial: Tutorial showing you how to make a user enable macros in a workbook in order to view the w…
Subscribe for Weekly Tutorials
BONUS: subscribe now to download our Top Tutorials Ebook!
Excel VBA Course — From Beginner to Expert
200+ Video Lessons
50+ Hours of Video
200+ Excel Guides
Become a master of VBA and Macros in Excel and learn how to automate all of your tasks in Excel with this online course. (No VBA experience required.)
View Course