Vba excel как открыть браузер

 

Rigel44

Пользователь

Сообщений: 69
Регистрация: 20.12.2014

Добрый день! Все решения по открыванию интернет-сайта по ссылке через VBA, которые я видел, открывают его в Internet Explorer. Ни для кого не секрет, что он загибается. Как открыть ссылку браузером по умолчанию или хотя бы MS Edge? Спасибо!

 

Dima S

Пользователь

Сообщений: 2063
Регистрация: 01.01.1970

что вы подразумеваете под «открыванием интернет-сайта по ссылке через VBA»?
просто переход по ссылке через браузер или получение каких то данных в переменную?(при этом не обязательно показывать что либо пользователю)

 

Rigel44

Пользователь

Сообщений: 69
Регистрация: 20.12.2014

Dima S, имею в виду открыть сайт в браузере

Изменено: Rigel4421.06.2020 23:14:38

 

Rigel44

Пользователь

Сообщений: 69
Регистрация: 20.12.2014

#4

21.06.2020 23:16:54

Сам отвечу на свой вопрос. Нашел на просторах интернета:

https://www.devhut.net/2018/02/01/vba-open-a-url-in-firefox-chrome/

Вроде работает, но может можно как-то попроще?
Также не разобрался, как добавить сюда Яндекс.Браузер
К тому же тут нужно выбирать браузер, а как открыть именно браузером по умолчанию, если не знаешь, какой у пользователя установлен браузер?

Код
Enum BrowserName    'This Enum is part of Sub OpenURL()
    InternetExplorer = 1
    FireFox = 2
    Chrome = 3
    Opera = 4
    Edge = 5
    Brave = 6
End Enum
 
 
'---------------------------------------------------------------------------------------
' Procedure : OpenURL
' Author    : Daniel Pineault, CARDA Consultants Inc.
' Website   : http://www.cardaconsultants.com
' Purpose   : Open a URL in FireFox
' Copyright : The following is release as Attribution-ShareAlike 4.0 International
'             (CC BY-SA 4.0) - https://creativecommons.org/licenses/by-sa/4.0/
' Req'd Refs: Uses Late Binding, so none required
'
' Input Variables:
' ~~~~~~~~~~~~~~~~
' sURL      : URL to open in FifeFox
'
' Usage:
' ~~~~~~
' Call OpenURL("http://www.google.ca", InternetExplorer)
' Call OpenURL("devhut.net", Chrome)
' Call OpenURL("msdn.com", FireFox)
' Call OpenURL("google.ca", Opera)
' Call OpenURL("http://www.google.ca", Edge)
' Call OpenURL("http://www.google.ca", Brave)
'
' Revision History:
' Rev       Date(yyyy/mm/dd)        Description
' **************************************************************************************
' 1         2014-11-13              Initial Release
' 2         2018-02-01              Updated Copyright under CC licensing
'                                   Error trapped FireFox not installed
' 3         2018-02-01              Complete revamp of the code to accomodate multiple
'                                   Browser
' 4         2020-04-27              Added Microsoft Edge
'                                   Added Brave
'---------------------------------------------------------------------------------------
Sub OpenURL(ByVal sURL As String, ByVal lBrowser As BrowserName)
    On Error GoTo Error_Handler
    Dim WSHShell              As Object
    Dim sFFExe                As String     'Executable path/filename
    Dim sProgName             As String     'Name of the Executable program
    Dim sExe                  As String     'Excutable exe filename
    Dim sCmdLineSwitch        As String     'Command line switch
    Dim sShellCmd             As String     'Shell Command
 
    'Determine the Path to FF executable
    Select Case lBrowser
        Case 1
            'https://msdn.microsoft.com/en-us/library/hh826025(v=vs.85).aspx
            sProgName = "Internet Explorer"
            sExe = "IEXPLORE.EXE"
            sCmdLineSwitch = " "
        Case 2
            'https://developer.mozilla.org/en-US/docs/Mozilla/Command_Line_Options#Browser
            sProgName = "Mozilla Firefox"
            sExe = "Firefox.EXE"
            sCmdLineSwitch = " -new-tab "
        Case 3
            sProgName = "Google Chrome"
            sExe = "Chrome.exe"
            sCmdLineSwitch = " -tab "
        Case 4
            'http://www.opera.com/docs/switches/
            sProgName = "Opera"
            sExe = "opera.exe"
            sCmdLineSwitch = " "
        Case 5
            sProgName = "Microsoft Edge"
            sExe = "Chrome.exe"
            sCmdLineSwitch = " -tab "
        Case 6
            sProgName = "Brave"
            sExe = "brave.exe"
            sCmdLineSwitch = " -tab "
    End Select
 
    If lBrowser = 5 Then    'Special case for Edge!  Thank you Microsoft for not following the rules!
        sShellCmd = "cmd /c """ & "start microsoft-edge:" & sURL & """"
    Else
        Set WSHShell = CreateObject("WScript.Shell")
        sFFExe = WSHShell.RegRead("HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows" & _
                                  "CurrentVersionApp Paths" & sExe & "")
        sFFExe = Replace(sFFExe, Chr(34), "")    'Special case for Opera?!
        'Open the URL
        sShellCmd = """" & sFFExe & """" & "" & sCmdLineSwitch & """" & sURL & """"
    End If
    shell sShellCmd, vbHide
 
Error_Handler_Exit:
    On Error Resume Next
    If Not WSHShell Is Nothing Then Set WSHShell = Nothing
    Exit Sub
 
Error_Handler:
    If Err.Number = -2147024894 Then
        MsgBox sProgName & " does not appear to be installed on this compter", _
               vbInformation Or vbOKOnly, "Unable to open the requested URL"
    Else
        MsgBox "The following error has occurred" & vbCrLf & vbCrLf & _
               "Error Number: " & Err.Number & vbCrLf & _
               "Error Source: OpenURL" & vbCrLf & _
               "Error Description: " & Err.Description & _
               Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _
               , vbOKOnly + vbCritical, "An Error has Occurred!"
    End If
    Resume Error_Handler_Exit
End Sub

Изменено: Rigel4421.06.2020 23:19:14

 

bedvit

Пользователь

Сообщений: 2477
Регистрация: 02.04.2015

Виталий

Через Shell не взлетает?

«Бритва Оккама» или «Принцип Калашникова»?

 

Александр Моторин

Пользователь

Сообщений: 958
Регистрация: 31.12.2012

#6

21.06.2020 23:40:13

Код
Public Declare Function ShellExecute _
  Lib "shell32.dll" Alias "ShellExecuteA" ( _
  ByVal hWnd As Long, _
  ByVal Operation As String, _
  ByVal FileName As String, _
  Optional ByVal Parameters As String, _
  Optional ByVal Directory As String, _
  Optional ByVal WindowStyle As Long = vbMinimizedFocus _
  ) As Long


'------------------------------------------------------------------------
' Open Webpage in default browser
'------------------------------------------------------------------------
Public Sub OpenUrl(strURL)
    Dim lSuccess As Long
    lSuccess = ShellExecute(0, "Open", strURL)
End Sub
 

Rigel44

Пользователь

Сообщений: 69
Регистрация: 20.12.2014

#7

21.06.2020 23:42:54

Александр Моторин, пробовал, у меня ничего не открывается, просто ничего не происходит. Что не так делаю?

Код
Public Declare Function ShellExecute _
  Lib "shell32.dll" Alias "ShellExecuteA" ( _
  ByVal hWnd As Long, _
  ByVal Operation As String, _
  ByVal FileName As String, _
  Optional ByVal Parameters As String, _
  Optional ByVal Directory As String, _
  Optional ByVal WindowStyle As Long = vbMinimizedFocus _
  ) As Long
 
 
'------------------------------------------------------------------------
' Open Webpage in default browser
'------------------------------------------------------------------------
Public Sub OpenUrl(strURL)
    Dim lSuccess As Long
    lSuccess = ShellExecute(0, "Open", strURL)
End Sub


Sub OpenUr()
    Call OpenUrl("https://yandex.ru")
End Sub
 

Rigel44

Пользователь

Сообщений: 69
Регистрация: 20.12.2014

Уточняю. У меня не работало, когда браузер по умолчанию ставил Яндекс.Браузер, с другими браузерами работает. Но что не так с Яндекс.Браузером? Есть ли способ программно узнать, какой браузер стоит по умолчанию?

Изменено: Rigel4422.06.2020 00:06:00

 

Игорь

Пользователь

Сообщений: 3631
Регистрация: 23.12.2012

#9

22.06.2020 01:09:46

Всё намного проще.
Одна строка кода (открывающая ссылку в браузере по умолчанию)

Код
CreateObject("WScript.Shell").Run "https://ExcelVBA.ru/"
 

bedvit

Пользователь

Сообщений: 2477
Регистрация: 02.04.2015

Виталий

Я же про это и писал. Игорь спасибо за реализацию.

«Бритва Оккама» или «Принцип Калашникова»?

 

Rigel44

Пользователь

Сообщений: 69
Регистрация: 20.12.2014

Игорь, спасибо! Но еще раз повторюсь, метод работает не со всеми браузерами. При установке по умолчанию Яндекс.Браузер у меня выскакивает ошибка (прилагаю скрин). В других браузерах нормально, но все же, получается это не универсальное решение. Поэтому хочу программно узнать, какой браузер по умолчанию и если Яндекс — открывать, например, через Edge

Изменено: Rigel4422.06.2020 23:13:45

 

Игорь

Пользователь

Сообщений: 3631
Регистрация: 23.12.2012

Это не ошибка макроса
Это у вас в системе (windows) что-то криво установлено

Макрос делает то же самое, что вы сделали бы вручную, нажав в Windows в меню ПУСК пункт ВЫПОЛНИТЬ, вставив туда ссылку, и кликнув на ОК
Это стандартный функционал Windows (она понимает, что это ссылка, и её нужно отправить в браузер по умолчанию)
Если же у вас этот макрос выдаёт ошибку (а этот макрос у меня проверен более чем на 10 тысячах разных компов),
то искать проблему надо не в макросе, а откатывать windows до того состояния, когда она умела открывать ссылки.

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#13

23.06.2020 07:44:52

Доброе время суток

Цитата
Rigel44 написал:
Есть ли способ программно узнать, какой браузер стоит по умолчанию?

Проверил варианты

Windows RegKey — Default Browser Application Path

. В Windows 10 правильно записан Edge, в Window 7 Chrome. По найденному в ProgId идентификатору приложения в ветке HKEY_CLASSES_ROOTChromeHTMLshellopencommand вполне себе указан путь к браузеру по умолчанию. Дерзайте.

 

Андрей_26

Пользователь

Сообщений: 647
Регистрация: 30.01.2018

 

Rigel44

Пользователь

Сообщений: 69
Регистрация: 20.12.2014

Андрей VG, спасибо, это очень полезно! Но можно тупой вопрос, как залезть через VBA в произвольную ветвь реестра? Я умею только работать с ветвью VBA через GetSetting

Изменено: Rigel4423.06.2020 09:21:36

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#16

23.06.2020 10:04:46

Цитата
Rigel44 написал:
как залезть через VBA в произвольную ветвь реестра?

Почитайте

, там и другого полезного не мало.

P. S. Медведь, а вот гранат не надо — палки будет достаточно :)

 

Rigel44

Пользователь

Сообщений: 69
Регистрация: 20.12.2014

#17

23.06.2020 22:21:03

Андрей VG, здорово! спасибо!

Извините, снова вопросы. Почему вы написали ветку HKEY_CLASSES_ROOTChromeHTMLshellopencommand — у меня, например, Crome не установлен, поэтому и ветки такой нет. Да и почему в ветке хрома должен быть адрес браузера по умолчанию?
Смотрю ветку HKEY_CLASSES_ROOThttpshellopencommand — действительно, вижу адрес «C:Program FilesInternet ExplorerIEXPLORE.EXE» %1 , но у меня сейчас по умолчанию не IE стоит, а там адрес IE. В общем, не понимаю, уж простите ((

Что-то похожее нашел вот в этой ветке:

Код
HKEY_CURRENT_USERSoftwareMicrosoftWindowsShellAssociati­onsUrlAssociationshttpUserChoice

Значение переменной ProgId: YandexHTML.44X6GKC2M3EKCRFCQB634HVWGE

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#18

23.06.2020 22:48:26

Цитата
Rigel44 написал:
Что-то похожее нашел вот в этой ветке:HKEY_CURRENT_USERSoftwareMicrosoftWindowsShellAssociati­­onsUrlAssociationshttpUserChoice

Правильно ли я понимаю, что статью по ссылке вы не читали? Так как именно там указывалось посмотреть progId браузера по умолчанию в найденной вами ветке.

Забавно :)

Изменено: Андрей VG23.06.2020 23:16:25

 

Rigel44

Пользователь

Сообщений: 69
Регистрация: 20.12.2014

Андрей VG, да, видимо поторопился. спасибо.
Сейчас начал «играться» с командами по чтению и записи из реестра при помощи объекта WshShell, в итоге в редакторе реестра исчезла ветка VBA (HKEY_CURRENT_USERSoftwareVB and VBA Program Settings), т.е. ее не видно в дереве. При этом пишет и читает программно без проблем. То же самое при попытке записать в другие папки тоже не отображаются никакие изменения, при этом программно все нормально читает. Такое ощущение, что реестр не обновляется больше, что это может быть???

 

RAN

Пользователь

Сообщений: 7091
Регистрация: 21.12.2012

#20

24.06.2020 17:44:11

Который день не могу понять, чем обычное

Код
ThisWorkbook.FollowHyperlink "https://www.planetaexcel.ru/"

не подходит?

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#21

24.06.2020 17:48:24

Цитата
RAN написал:
не подходит?

А помучаться? А записать куда-нибудь что-нибудь,. чтобы всё пропало? :)

Цитата
Rigel44 написал:
начал «играться» с командами по чтению и записи из реестра при помощи объекта WshShell

Надеюсь точку восстановления перед этим сделали? Читать читал реестр и через WshShell и через WMI, а вот запись делал только штатными VBA WriteSettings, поэтому ничего сказать и посоветовать не могу.

 

Rigel44

Пользователь

Сообщений: 69
Регистрация: 20.12.2014

#22

24.06.2020 20:45:04

Цитата
RAN написал:
Который день не могу понять, чем обычноеКод ? 1ThisWorkbook.FollowHyperlink » https://www.planetaexcel.ru/ «не подходит?

Вот поэтому, у меня не работает:

Прикрепленные файлы

  • Скриншот 24-06-2020 204359.png (10.92 КБ)

 

Игорь

Пользователь

Сообщений: 3631
Регистрация: 23.12.2012

Вам уже второй простой проверенный код дали, из одной строки
Дальше будете искать коды и пробовать, или перечитаете то что я вам написал, насчёт сбоя в реестре из-за кривой установки браузера?
(и у вас после решения этой проблемы все эти макросы заработают без ошибок)

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

#24

24.06.2020 23:17:31

На всякий случай

Код
Sub qqq()
    x = Shell("""C:Program FilesInternet ExplorerIEXPLORE.EXE""" & """http://www.planetaexcel.ru""", vbNormalNoFocus)
    x = Shell("""C:Program FilesMozilla Firefoxfirefox.exe""" & """https://www.mail.ru""", vbNormalNoFocus)
    x = Shell("""C:Program FilesOperalauncher.exe""" & """https://www.planetaexcel.ru""", vbNormalNoFocus)
End Sub
 

Rigel44

Пользователь

Сообщений: 69
Регистрация: 20.12.2014

#25

24.06.2020 23:31:02

Игорь, я переустанавливал браузер, ошибка не ушла. Поэтому сделал ее обход: если по умолчанию Яндекс, тогда запускается Edge, в остальных случаях по умолчанию. Я не знаю, проблема ли это моего компьютера или Яндекса, задача, чтобы сайт открывался, я ее решил. Всем спасибо за помощь!

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.

Открыть браузер макросом

Nic70y

Дата: Понедельник, 04.12.2017, 18:39 |
Сообщение № 1

Группа: Друзья

Ранг: Экселист

Сообщений: 8134


Репутация:

1998

±

Замечаний:
0% ±


Excel 2010

Здрасте!
подскажите тупорылому пжл
как открыть браузер (желательно 2 раза)
[vba]

Код

Sub U_726()
    With CreateObject(«WScript.Shell»)
        .Run «https://www.youtube.com/?gl=RU&hl=ru»
        .Run «http://www.excelworld.ru/forum/2»
    End With
End Sub

[/vba]
не канает
надо как на картинке

К сообщению приложен файл:

3288721.jpg
(35.8 Kb)


ЮMoney 41001841029809

Сообщение отредактировал Nic70yПонедельник, 04.12.2017, 18:40

 

Ответить

buchlotnik

Дата: Понедельник, 04.12.2017, 19:19 |
Сообщение № 2

Группа: Заблокированные

Ранг: Участник клуба

Сообщений: 3442


Репутация:

929

±

Замечаний:
20% ±


2010, 2013, 2016 RUS / ENG

Ну для IE выглядит так: [vba]

Код

Sub Automate_IE()
    Dim URL$, IE As Object
    Set IE = CreateObject(«InternetExplorer.Application»)
    IE.Visible = True
    URL = «http://www.excelworld.ru/forum/2»
    IE.Navigate URL
End Sub

[/vba]
Для лисы надо подумать

К сообщению приложен файл:

Run.xlsm
(13.9 Kb)

 

Ответить

buchlotnik

Дата: Понедельник, 04.12.2017, 19:34 |
Сообщение № 3

Группа: Заблокированные

Ранг: Участник клуба

Сообщений: 3442


Репутация:

929

±

Замечаний:
20% ±


2010, 2013, 2016 RUS / ENG

Вот так для лисы (путь к экзешнику подправь в зависимости от оси) [vba]

Код

Sub Automate_FX()
Set objShell = CreateObject(«WScript.Shell»)
objShell.Run («»»C:Program FilesMozilla FirefoxFirefox.exe»» «»http://www.excelworld.ru/forum/2″»»)
Application.Wait (Now + TimeValue(«00:00:05»))
objShell.Run («»»C:Program FilesMozilla FirefoxFirefox.exe»» «»http://www.excelworld.ru/forum/10″»»)
End Sub

[/vba]

К сообщению приложен файл:

7442080.xlsm
(13.8 Kb)

 

Ответить

_Boroda_

Дата: Понедельник, 04.12.2017, 19:37 |
Сообщение № 4

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

RAN

Дата: Понедельник, 04.12.2017, 21:54 |
Сообщение № 5

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

[vba]

Код

Sub ww()
    ActiveWorkbook.FollowHyperlink («http://www.excelworld.ru/forum/10-36393-1»)
End Sub

[/vba]


Быть или не быть, вот в чем загвоздка!

 

Ответить

Nic70y

Дата: Вторник, 05.12.2017, 08:25 |
Сообщение № 6

Группа: Друзья

Ранг: Экселист

Сообщений: 8134


Репутация:

1998

±

Замечаний:
0% ±


Excel 2010

спс
почти получилось
[vba]

Код

Sub U_214()
    With CreateObject(«WScript.Shell»)
        .Run «https://www.youtube.com/?gl=RU&hl=ru»
    End With
    Shell («C:Program Files (x86)Mozilla Firefoxfirefox.exe»)
End Sub

[/vba]


ЮMoney 41001841029809

 

Ответить

Nic70y

Дата: Четверг, 07.12.2017, 17:56 |
Сообщение № 7

Группа: Друзья

Ранг: Экселист

Сообщений: 8134


Репутация:

1998

±

Замечаний:
0% ±


Excel 2010

поговориил тута я сёдня с сисадмином (провайдер)
он мне сказал, что походу встроенными (стандартными) средствами
системы (без галочек) мой вопрос не решить,
если он прав — обидно :(


ЮMoney 41001841029809

 

Ответить

krosav4ig

Дата: Четверг, 07.12.2017, 21:46 |
Сообщение № 8

Группа: Друзья

Ранг: Старожил

Сообщений: 2346


Репутация:

989

±

Замечаний:
0% ±


Excel 2007,2010,2013

Добрый вечер. Может так?
[vba]

Код

Sub RunChrome(ByVal url As Variant)
    Dim v As Variant
    With CreateObject(«WScript.Shell»)
        On Error Resume Next
        For Each v In url
            Shell «»»» & .RegRead(«HKLMSOFTWAREMicrosoftWindowsCurrentVersionApp Pathschrome.exe») & _
                «»» —new-window «»» & IIf(IsEmpty(v), url, v) & «»»»
        Next
    End With
End Function
Sub RunFirefox(ByVal url As Variant)
    Dim v As Variant
    With CreateObject(«WScript.Shell»)
        On Error Resume Next
        For Each v In url
            Shell «»»» & .RegRead(«HKLMSOFTWAREMicrosoftWindowsCurrentVersionApp Pathsfirefox.exe») & _
                «»» -new-window «»» & IIf(IsEmpty(v), url, v) & «»»»
        Next
    End With
End Function

RunChrome array(«https://www.youtube.com/?gl=RU&hl=ru»,»http://www.excelworld.ru/forum/2″)

[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

Сообщение отредактировал krosav4igЧетверг, 07.12.2017, 21:49

 

Ответить

Another request we see in various forums is how to launch a URL in an alternate web browser and not use Internet Explorer or whatever the default browser happens to be on a given PC.

Automating FireFox

Luckily for us, FireFox accepts command line switches for such automation.

Below is a simple procedure that accepts the URL you wish to open and opens a new tab in FireFox to that URL.

'---------------------------------------------------------------------------------------
' Procedure : OpenURLInFF
' Author    : Daniel Pineault, CARDA Consultants Inc.
' Website   : http://www.cardaconsultants.com
' Purpose   : Open a URL in FireFox
' Copyright : The following is release as Attribution-ShareAlike 4.0 International
'             (CC BY-SA 4.0) - https://creativecommons.org/licenses/by-sa/4.0/
' Req'd Refs: Uses Late Binding, so none required
'
' Input Variables:
' ~~~~~~~~~~~~~~~~
' sURL      : URL to open in FifeFox
'
' Usage:
' ~~~~~~
' Call OpenURLInFF("http://www.google.ca")
' Call OpenURLInFF("devhut.net")
'
' Revision History:
' Rev       Date(yyyy/mm/dd)        Description
' **************************************************************************************
' 1         2014-11-13              Initial Release
' 2         2018-02-01              Updated Copyright under CC licensing
'                                   Error trapped FireFox not installed
'---------------------------------------------------------------------------------------
Sub OpenURLInFF(ByVal sURL As String)
    On Error GoTo Error_Handler
    Dim WSHShell              As Object
    Dim sFFExe                As String    'FF executable path/filename

    'Determine the Path to FF executable
    Set WSHShell = CreateObject("WScript.Shell")
    sFFExe = WSHShell.RegRead("HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionApp PathsFirefox.EXE")
    'Open the URL
    Shell """" & sFFExe & """" & " -new-tab """ & sURL & "", vbHide

Error_Handler_Exit:
    On Error Resume Next
    If Not WSHShell Is Nothing Then Set WSHShell = Nothing
    Exit Sub

Error_Handler:
    If Err.Number = -2147024894 Then
        MsgBox "FireFox does not appear to be installed on this compter", _
               vbInformation Or vbOKOnly, "Unable to open the requested URL"
    Else
        MsgBox "The following error has occurred" & vbCrLf & vbCrLf & _
               "Error Number: " & Err.Number & vbCrLf & _
               "Error Source: OpenURLInFF" & vbCrLf & _
               "Error Description: " & Err.Description & _
               Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _
               , vbOKOnly + vbCritical, "An Error has Occurred!"
    End If
    Resume Error_Handler_Exit
End Sub

Using Chrome Instead

Chrome can similarly be automate but instead of -new-tab, it is simply -url

A Procedure to Control Them All!

Okay, it was bothering me to have to have an individual VBA procedure for each browser and thought to myself: “How hard can it be to have a single procedure to use any browser of my choosing?”. Well, it turns out that it isn’t that hard at all (noting a minor special case for Opera and Microsoft Edge)! Below is a simple procedure that, currently, will work with 6 of the most popular browsers.

  • Internet Explorer
  • FireFox
  • Chrome
  • Opera
  • Microsoft Edge
  • Brave
Enum BrowserName
    'This Enum is part of Sub OpenURL()
    ' *** If changes are made here, update GetBrowserNameEnumValue()
    iexplore = 1
    firefox = 2
    chrome = 3
    opera = 4
    msedge = 5
    brave = 6
End Enum


'---------------------------------------------------------------------------------------
' Procedure : OpenURL
' Author    : Daniel Pineault, CARDA Consultants Inc.
' Website   : http://www.cardaconsultants.com
' Purpose   : Open a URL in a browser
' Copyright : The following is release as Attribution-ShareAlike 4.0 International
'             (CC BY-SA 4.0) - https://creativecommons.org/licenses/by-sa/4.0/
' Req'd Refs: Uses Late Binding, so none required
' Dependencies: BrowserName Enum, GetDefaultBrowser(), GetBrowserNameEnumValue()
'
' Input Variables:
' ~~~~~~~~~~~~~~~~
' sURL      : URL to open
' lBrowser  : Optional, browser to be used to open the URL, if omitted, the system's
'               default browser will be used
'
' Usage:
' ~~~~~~
' Call OpenURL("https://www.google.ca") 'will use the user's default browser
' Call OpenURL("https://www.google.ca", iexplore)
' Call OpenURL("devhut.net", chrome)
' Call OpenURL("msdn.com", firefox)
' Call OpenURL("google.ca", opera)
' Call OpenURL("https://www.google.ca", msedge)
' Call OpenURL("https://www.google.ca", brave)
'
' Revision History:
' Rev       Date(yyyy/mm/dd)        Description
' **************************************************************************************
' 1         2014-11-13              Initial Release
' 2         2018-02-01              Updated Copyright under CC licensing
'                                   Error trapped FireFox not installed
' 3         2018-02-01              Complete revamp of the code to accomodate multiple
'                                   Browser
' 4         2020-04-27              Added Microsoft Edge
'                                   Added Brave
' 5         2020-12-14              Adapted to now have lBrowser as optional and the
'                                   ability to determine the system's default browser
' 6         2022-07-03              Fixed usage examples to match Enum, forgot to do so
'                                   after the last update
'                                   changed msedge sExe to make people happy, not used!
'---------------------------------------------------------------------------------------
Sub OpenURL(ByVal sURL As String, Optional lBrowser As BrowserName)
    Dim oShell                As Object
    Dim sFFExe                As String     'Executable path/filename
    Dim sProgName             As String     'Name of the Executable program
    Dim sExe                  As String     'Executable exe filename
    Dim sCmdLineSwitch        As String     'Command line switch
    Dim sShellCmd             As String     'Shell Command

    On Error GoTo Error_Handler

    'If no browser is specified then use the system's default one
    If lBrowser = 0 Then
        lBrowser = GetBrowserNameEnumValue(GetDefaultBrowser())
    End If

    'Determine the Path to executable
    Select Case lBrowser
        Case 1
            'https://msdn.microsoft.com/en-us/library/hh826025(v=vs.85).aspx
            sProgName = "Internet Explorer"
            sExe = "IEXPLORE.EXE"
            sCmdLineSwitch = " "
        Case 2
            'https://developer.mozilla.org/en-US/docs/Mozilla/Command_Line_Options#Browser
            sProgName = "Mozilla Firefox"
            sExe = "Firefox.EXE"
            sCmdLineSwitch = " -new-tab "
        Case 3
            sProgName = "Google Chrome"
            sExe = "Chrome.exe"
            sCmdLineSwitch = " -tab "
        Case 4
            'http://www.opera.com/docs/switches/
            sProgName = "Opera"
            sExe = "opera.exe"
            sCmdLineSwitch = " "
        Case 5
            sProgName = "Microsoft Edge"
            sExe = "msedge.exe"
            sCmdLineSwitch = " -tab "
        Case 6
            sProgName = "Brave"
            sExe = "brave.exe"
            sCmdLineSwitch = " -tab "
    End Select

    If lBrowser = 5 Then    'Special case for Edge!  Thank you Microsoft for not following the rules!
        'Build the command
        sShellCmd = "cmd /c """ & "start microsoft-edge:" & sURL & """"
    Else
        Set oShell = CreateObject("WScript.Shell")
        sFFExe = oShell.RegRead("HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows" & _
                                "CurrentVersionApp Paths" & sExe & "")
        'Parse the returned string
        sFFExe = Replace(sFFExe, Chr(34), "")    'Special case for Opera?!
        'Build the command
        sShellCmd = """" & sFFExe & """" & "" & sCmdLineSwitch & """" & sURL & """"
    End If
    'Open the URL
    Shell sShellCmd, vbHide

Error_Handler_Exit:
    On Error Resume Next
    If Not oShell Is Nothing Then Set oShell = Nothing
    Exit Sub

Error_Handler:
    If Err.Number = -2147024894 Then
        MsgBox sProgName & " does not appear to be installed on this compter", _
               vbInformation Or vbOKOnly, "Unable to open the requested URL"
    Else
        MsgBox "The following error has occurred" & vbCrLf & vbCrLf & _
               "Error Number: " & Err.Number & vbCrLf & _
               "Error Source: OpenURL" & vbCrLf & _
               "Error Description: " & Err.Description & _
               Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _
               , vbOKOnly + vbCritical, "An Error has Occurred!"
    End If
    Resume Error_Handler_Exit
End Sub

'---------------------------------------------------------------------------------------
' Procedure : GetDefaultBrowser
' Author    : Daniel Pineault, CARDA Consultants Inc.
' Website   : http://www.cardaconsultants.com
' Purpose   : Returns the name of the System's Default Web Browser
' Copyright : The following is release as Attribution-ShareAlike 4.0 International
'             (CC BY-SA 4.0) - https://creativecommons.org/licenses/by-sa/4.0/
' Req'd Refs: Uses Late Binding, so none required
'
' Usage:
' ~~~~~~
' GetDefaultBrowser()
'   -> msedge, firefox, brave, iexplore, ...
'
' Revision History:
' Rev       Date(yyyy/mm/dd)        Description
' **************************************************************************************
' 1         2020-12-14              Initial Release
'---------------------------------------------------------------------------------------
Function GetDefaultBrowser() As String
    Dim oShell                As Object
    Dim sProgId               As String
    Dim sCommand              As String
    Dim aCommand              As Variant

    On Error GoTo Error_Handler

    Set oShell = CreateObject("WScript.Shell")
    'Default ProgId
    sProgId = oShell.RegRead("HKEY_CURRENT_USERSoftwareMicrosoftWindowsShellAssociations" & _
                             "UrlAssociationshttpsUserChoiceProgId")
    'Cross-reference the sProgId to get the exe associated with it
    sCommand = oShell.RegRead("HKEY_CLASSES_ROOT" & sProgId & "shellopencommand")
    'Parse the returned value to extract just the exe filename
    aCommand = Split(sCommand, Chr(34))
    GetDefaultBrowser = Right(aCommand(1), Len(aCommand(1)) - InStrRev(aCommand(1), ""))    ' firefox.exe
    GetDefaultBrowser = Left(GetDefaultBrowser, InStr(GetDefaultBrowser, ".") - 1)    'firefox

Error_Handler_Exit:
    On Error Resume Next
    If Not oShell Is Nothing Then Set oShell = Nothing
    Exit Function

Error_Handler:
    MsgBox "The following error has occurred" & vbCrLf & vbCrLf & _
           "Error Number: " & Err.Number & vbCrLf & _
           "Error Source: GetDefaultBrowser" & vbCrLf & _
           "Error Description: " & Err.Description & _
           Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _
           , vbOKOnly + vbCritical, "An Error has Occurred!"
    Resume Error_Handler_Exit
End Function

'---------------------------------------------------------------------------------------
' Procedure : GetBrowserNameEnumValue
' Author    : Daniel Pineault, CARDA Consultants Inc.
' Website   : http://www.cardaconsultants.com
' Purpose   : Convert the returned value from GetDefaultBrowser() into the proper Enum
'               Value.  This is required as VBA offers no way to evaluate a returned
'               value from a function against an Enum, no way to iterate over the string
'               values of an Enum, ...
' Copyright : The following is release as Attribution-ShareAlike 4.0 International
'             (CC BY-SA 4.0) - https://creativecommons.org/licenses/by-sa/4.0/
' Req'd Refs: None required
'
' Usage:
' ~~~~~~
' GetBrowserNameEnumValue(GetDefaultBrowser())
'   -> 1, 2, 3, ...
' GetBrowserNameEnumValue("firefox")
'   -> 2
'
' Revision History:
' Rev       Date(yyyy/mm/dd)        Description
' **************************************************************************************
' 1         2020-12-14              Initial Release
'---------------------------------------------------------------------------------------
Function GetBrowserNameEnumValue(sInput As String) As Long
    On Error GoTo Error_Handler

    Select Case sInput
        Case "iexplore"
            GetBrowserNameEnumValue = BrowserName.iexplore
        Case "firefox"
            GetBrowserNameEnumValue = BrowserName.firefox
        Case "chrome"
            GetBrowserNameEnumValue = BrowserName.chrome
        Case "opera"
            GetBrowserNameEnumValue = BrowserName.opera
        Case "msedge"
            GetBrowserNameEnumValue = BrowserName.msedge
        Case "brave"
            GetBrowserNameEnumValue = BrowserName.brave
        Case Else
            GetBrowserNameEnumValue = 0
    End Select

Error_Handler_Exit:
    On Error Resume Next
    Exit Function

Error_Handler:
    MsgBox "The following error has occurred" & vbCrLf & vbCrLf & _
           "Error Number: " & Err.Number & vbCrLf & _
           "Error Source: GetBrowserNameEnumValue" & vbCrLf & _
           "Error Description: " & Err.Description & _
           Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _
           , vbOKOnly + vbCritical, "An Error has Occurred!"
    Resume Error_Handler_Exit
End Function

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

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

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

Понравилась статья? Поделить с друзьями:
  • Vba excel как определить выделенную ячейку
  • Vba excel как остановить выполнение макроса
  • Vba excel как определить адрес ячейки
  • Vba excel как определить формат ячейки excel
  • Vba excel как объявить массив