ExcelのVBAからEdgeやChromeを操作する方法(その1:初期設定)
ExcelのVBAからEdgeやChromeを操作する方法を紹介します。
「その1」は、VBAの設定と、ブラウザ(Edge)が開くまでの手順を紹介します。
1.はじめに
以前、「iMacros」を使ってブラウザを操作する方法を紹介しましたが、VBAからGoogleChromeやEdgeを操作する方法をみつけたので何回かに分けて紹介したいと思います。
VBAを利用することで、ブラウザ上のフォームデータの入力やを送信もできるようです。
今回は下記の記事前半の手順を詳しく説明したものです。
Excel VBAでSeleniumBasicを使わずにスクレイピングする
2.Microsoft Edge WebDriverのダウンロード
Microsoft Edge WebDriverのサイトにアクセスして、少し下にある「最新バージョン」から、該当のEdgeバージョンのドライバをダウンロードします。
Edgeのバージョンの確認は、ブラウザ右側にある設定アイコンをクリックして、「ヘルプとフィードバック」→「Microsoft Edgeについて」をクリック。
次の画面でバージョン「114.0.1823.58」が表示されました。
さきほどアクセスしたサイトから、これと同じバージョンの該当OSのリンクをクリックしてダウンロード。私が使っているPCはWindowsの64bitなので、ここでは「x64」をクリックしています。
ダウンロードしたアーカイブを展開して、中にmsedgedriver.exeがあることを確認します(あとで利用します)。
Chromeで利用したい場合は、ChromeDriverのサイトからダウンロードしてください。
こちらもバージョンが一致している必要があります。
3.VBA-JSONのダウンロード
VBA-JSONのサイトにアクセスして、「Source code(zip)」または「Source code(tar.gz)」をクリックしてダウンロードします。
ダウンロードしたアーカイブを展開して、中にJsonConverter.basがあることを確認します(あとで利用します)。
4.VBAの設定
メニューにマクロが表示されていない場合は、まずメニューの表示設定をします。
・「ファイル」→「オプション」をクリックして開いた画面の「クイックアクセスツールバー」をクリック。
・左側のリストから「マクロ[マクロの表示]」をクリックして「追加」をクリックし、「OK」をクリック。
→バーにマクロのアイコンが表示される
ここからが本題です。
「表示」タブの「マクロ」→「マクロの表示」をクリック。
画面が開くので、マクロの名前に任意の名称(ここでは「test」)を入力して「作成」をクリック。
「Visual Basic Editor」が開きます。
プロジェクト・エクスプローラ上のツリーから[VBAProject(ファイル名)]を右クリックして、表示されたコンテキスト・メニューから[ファイルのインポート]を選択
[ファイルのインポート]ダイアログが開くので、「JsonConverter.bas」を選択し[開く]ボタンをクリック。
これで、プロジェクト・エクスプローラのツリーにもインポートしたモジュールが追加されます。
続いて、連想配列を扱うDictionary型を利用するための設定を行います。
VBEのメニューバーの「ツール」→「参照設定」をクリック。
「Microsoft Scripting Runtime」にチェックを入れて「OK」をクリック。
5.VBAにコード設定
関数「test」の中に、下記のコードを設定します。赤字の「C:\tmp\edgedriver_win64\msedgedriver.exe」には、2項でダウンロードしたmsedgedriver.exeをフルパスで指定してください。
Chromeの場合は「chromedriver.exe」を設定します。
Sub test()
' WebDriverの起動。デフォルトで9515番ポートを監視
Shell "C:\tmp\edgedriver_win64\msedgedriver.exe", vbMinimizedNoFocus
' ブラウザ起動パラメータの作成
Dim params As New Dictionary
params.Add "capabilities", New Dictionary
params.Add "desiredCapabilities", Nothing
' HTTPクライアントの起動
Dim client As Object
Set client = CreateObject("MSXML2.ServerXMLHTTP")
' 指示の送信
client.Open "POST", "http://localhost:9515/session"
client.setRequestHeader "Content-Type", "application/json"
client.send JsonConverter.ConvertToJson(params)
' 送信完了待ち
Do While client.readyState < 4
DoEvents
Loop
End Sub
実際の画面での追加は下記のようになります。
6.実行
「実行」→「Sub/ユーザーフォームの実行」をクリック。
EdgeまたはChromeが起動して、真っ白なページが表示されれば設定完了です。