PR
インターネット

【Excel VBA】ウェブサイトを開く

マクロでウェブサイトをURL指定で開く方法について、事例としてGoogle Chromeを使用してサイトを開く場合を紹介します。

ただし、Excelのバージョンによってツールの参照先に「Microsoft Web Browser」がある場合はいいのですが、無い場合は「Microsoft Internet Controls」を代替的に使用することになるので複雑になります。

1.Microsoft Web Browserありの場合

Sub GOOGLE_Chromeでウェブサイトを開く_1()
    'ウェブサイトのURLを指定する
    Dim url As String
    url = "https://yomoyamastudy.net"
    
    'Google Chromeオブジェクトを作成する
    Dim chrome As Object
    Set chrome = CreateObject("Chrome.Application")
    
    'ウェブサイトを開く
    chrome.Navigate url
    
    'ウェブサイトが開き終わるまで待機する
    Do While chrome.Busy Or chrome.ReadyState <> 4
        DoEvents
    Loop
    
    'ウェブサイトを閉じる
    chrome.Quit
    
    'オブジェクトを解放する
    Set chrome = Nothing
End Sub

2.Microsoft Web Browser無し(Microsoft Internet Controls)の場合

Sub GOOGLE_Chromeでウェブサイトを開く_2()

    Dim url As String
    Dim ie As Object
    Dim chromePid As Long

    'ウェブサイトのURLを指定する
    url = "https://yomoyamastudy.net"
    
    'InternetExplorerオブジェクトを作成する
    Set ie = CreateObject("InternetExplorer.Application")
    
    'Google Chromeのプロセスを探す
    chromePid = FindChromeProcessId()
    
    'ChromeのPIDを指定してInternetExplorerオブジェクトを使用する
    ie.Visible = True
    ie.Navigate "about:blank"
    Do While ie.Busy Or ie.ReadyState <> 4
        DoEvents
    Loop
    ie.Navigate "chrome://process/" & chromePid
    Do While ie.Busy Or ie.ReadyState <> 4
        DoEvents
    Loop
    ie.Navigate url
    
    'ウェブサイトが開き終わるまで待機する
    Do While ie.Busy Or ie.ReadyState <> 4
        DoEvents
    Loop
   
    'オブジェクトを解放する
    Set ie = Nothing
End Sub



Function FindChromeProcessId() As Long
  Dim shell As Object
    Dim wmi As Object
    Dim chromeProcesses As Object

    'Google ChromeのPIDを取得する
    Set shell = CreateObject("WScript.Shell")
    Set wmi = GetObject("winmgmts:")
    Set chromeProcesses = wmi.ExecQuery("SELECT * FROM Win32_Process WHERE Name LIKE '%chrome.exe'")
    For Each chromeProcess In chromeProcesses
        If InStr(chromeProcess.CommandLine, "--type=renderer") > 0 Then
            FindChromeProcessId = chromeProcess.ProcessId
            Exit Function
        End If
    Next chromeProcess
End Function

Microsoft Internet Controlsを使用する場合の上記コードですが、
まずInternetExplorerオブジェクトを作成し、Google ChromeのプロセスIDを取得するためにFindChromeProcessId関数を使用します。
その後、chrome://process/を使用して、ChromeのPIDを指定してウェブサイトを開きます。
最後に、オブジェクトを解放します。

コメント