Страницы: 1
RSS
Как открыть ссылку макросом НЕ через IE?, Как открыть ссылку браузером по умолчанию или MS Edge?
 
Добрый день! Все решения по открыванию интернет-сайта по ссылке через VBA, которые я видел, открывают его в Internet Explorer. Ни для кого не секрет, что он загибается. Как открыть ссылку браузером по умолчанию или хотя бы MS Edge? Спасибо!
 
что вы подразумеваете под "открыванием интернет-сайта по ссылке через VBA"?
просто переход по ссылке через браузер или получение каких то данных в переменную?(при этом не обязательно показывать что либо пользователю)
 
Dima S, имею в виду открыть сайт в браузере
Изменено: Rigel44 - 21.06.2020 23:14:38
 
Сам отвечу на свой вопрос. Нашел на просторах интернета:
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_MACHINE\SOFTWARE\Microsoft\Windows\" & _
                                  "CurrentVersion\App 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
Изменено: Rigel44 - 21.06.2020 23:19:14
 
Через Shell не взлетает?
«Бритва Оккама» или «Принцип Калашникова»?
 
Код
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
 
Александр Моторин, пробовал, у меня ничего не открывается, просто ничего не происходит. Что не так делаю?

Код
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 - 22.06.2020 00:06:00
 
Всё намного проще.
Одна строка кода (открывающая ссылку в браузере по умолчанию)
Код
CreateObject("WScript.Shell").Run "https://ExcelVBA.ru/"
 
Я же про это и писал. Игорь спасибо за реализацию.
«Бритва Оккама» или «Принцип Калашникова»?
 
Игорь, спасибо! Но еще раз повторюсь, метод работает не со всеми браузерами. При установке по умолчанию Яндекс.Браузер у меня выскакивает ошибка (прилагаю скрин). В других браузерах нормально, но все же, получается это не универсальное решение. Поэтому хочу программно узнать, какой браузер по умолчанию и если Яндекс - открывать, например, через Edge
Изменено: Rigel44 - 22.06.2020 23:13:45
 
Это не ошибка макроса
Это у вас в системе (windows) что-то криво установлено

Макрос делает то же самое, что вы сделали бы вручную, нажав в Windows в меню ПУСК пункт ВЫПОЛНИТЬ, вставив туда ссылку, и кликнув на ОК
Это стандартный функционал Windows (она понимает, что это ссылка, и её нужно отправить в браузер по умолчанию)
Если же у вас этот макрос выдаёт ошибку (а этот макрос у меня проверен более чем на 10 тысячах разных компов),
то искать проблему надо не в макросе, а откатывать windows до того состояния, когда она умела открывать ссылки.
 
Доброе время суток
Цитата
Rigel44 написал:
Есть ли способ программно узнать, какой браузер стоит по умолчанию?
Проверил варианты Windows RegKey - Default Browser Application Path. В Windows 10 правильно записан Edge, в Window 7 Chrome. По найденному в ProgId идентификатору приложения в ветке HKEY_CLASSES_ROOT\ChromeHTML\shell\open\command вполне себе указан путь к браузеру по умолчанию. Дерзайте.
 
Добрый день!
Using Excel VBA and Selenium
 
Андрей VG, спасибо, это очень полезно! Но можно тупой вопрос, как залезть через VBA в произвольную ветвь реестра? Я умею только работать с ветвью VBA через GetSetting
Изменено: Rigel44 - 23.06.2020 09:21:36
 
Цитата
Rigel44 написал:
как залезть через VBA в произвольную ветвь реестра?
Почитайте, там и другого полезного не мало.

P. S. Медведь, а вот гранат не надо - палки будет достаточно :)
 
Андрей VG, здорово! спасибо!

Извините, снова вопросы. Почему вы написали ветку HKEY_CLASSES_ROOT\ChromeHTML\shell\open\command - у меня, например, Crome не установлен, поэтому и ветки такой нет. Да и почему в ветке хрома должен быть адрес браузера по умолчанию?
Смотрю ветку HKEY_CLASSES_ROOT\http\shell\open\command - действительно, вижу адрес "C:\Program Files\Internet Explorer\IEXPLORE.EXE" %1 , но у меня сейчас по умолчанию не IE стоит, а там адрес IE. В общем, не понимаю, уж простите ((

Что-то похожее нашел вот в этой ветке:
Код
HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associati­ons\UrlAssociations\http\UserChoice

Значение переменной ProgId: YandexHTML.44X6GKC2M3EKCRFCQB634HVWGE
 
Цитата
Rigel44 написал:
Что-то похожее нашел вот в этой ветке:HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associati­­ons\UrlAssociations\http\UserChoice
Правильно ли я понимаю, что статью по ссылке вы не читали? Так как именно там указывалось посмотреть progId браузера по умолчанию в найденной вами ветке.

Забавно :)
Изменено: Андрей VG - 23.06.2020 23:16:25
 
Андрей VG, да, видимо поторопился. спасибо.
Сейчас начал "играться" с командами по чтению и записи из реестра при помощи объекта WshShell, в итоге в редакторе реестра исчезла ветка VBA (HKEY_CURRENT_USER\Software\VB and VBA Program Settings), т.е. ее не видно в дереве. При этом пишет и читает программно без проблем. То же самое при попытке записать в другие папки тоже не отображаются никакие изменения, при этом программно все нормально читает. Такое ощущение, что реестр не обновляется больше, что это может быть???
 
Который день не могу понять, чем обычное
Код
ThisWorkbook.FollowHyperlink "https://www.planetaexcel.ru/"

не подходит?
 
Цитата
RAN написал:
не подходит?
А помучаться? А записать куда-нибудь что-нибудь,. чтобы всё пропало? :)  
Цитата
Rigel44 написал:
начал "играться" с командами по чтению и записи из реестра при помощи объекта WshShell
Надеюсь точку восстановления перед этим сделали? Читать читал реестр и через WshShell и через WMI, а вот запись делал только штатными VBA WriteSettings, поэтому ничего сказать и посоветовать не могу.
 
Цитата
RAN написал:
Который день не могу понять, чем обычноеКод ? 1ThisWorkbook.FollowHyperlink " https://www.planetaexcel.ru/ "не подходит?
Вот поэтому, у меня не работает:
 
Вам уже второй простой проверенный код дали, из одной строки
Дальше будете искать коды и пробовать, или перечитаете то что я вам написал, насчёт сбоя в реестре из-за кривой установки браузера?
(и у вас после решения этой проблемы все эти макросы заработают без ошибок)
 
На всякий случай
Код
Sub qqq()
    x = Shell("""C:\Program Files\Internet Explorer\IEXPLORE.EXE""" & """http://www.planetaexcel.ru""", vbNormalNoFocus)
    x = Shell("""C:\Program Files\Mozilla Firefox\firefox.exe""" & """https://www.mail.ru""", vbNormalNoFocus)
    x = Shell("""C:\Program Files\Opera\launcher.exe""" & """https://www.planetaexcel.ru""", vbNormalNoFocus)
End Sub
 
Игорь, я переустанавливал браузер, ошибка не ушла. Поэтому сделал ее обход: если по умолчанию Яндекс, тогда запускается Edge, в остальных случаях по умолчанию. Я не знаю, проблема ли это моего компьютера или Яндекса, задача, чтобы сайт открывался, я ее решил. Всем спасибо за помощь!
Страницы: 1
Наверх