Excel VBAからIEを操作できなくなって困っている方も増えてきているようですね。
今回はVBAからIEに代わるブラウザとしてedgeやchromeを操作する方法をご紹介します。
VBA+DOMを使う
DOM(Document Object Model)はIEの操作でも使われてきた技術であり、ウィンドウハンドルを掴まえてgetElementByIdでHTMLソースのIDを操作することができるもの。
普段からVBAの操作に慣れている人であれば実装は難しくなく、IE操作の代替案として利用可能でしょう。
とはいえ、従来のIE設定とやり方が違うこともあり、根気強くできる方・スキルに自信のある方にはお勧めできます。
こちらのブログに丁寧に書かれていましたので、ご紹介のみさせていただきます。
WebDriverを使う
Microsoftが公開しているWebDriverを利用することでEdgeの操作を自動化できます。
WebDriver自体はブラウザを操作するドライバでありインタフェースにすぎないため、別途SeleniumとPython、Java、C#、Ruby、JavaScriptなどの言語スキルが必要になります。
プログラムスキルが初級以上であれば、ライブラリが充実しているpythonでのコーディングをおすすめします。
ただし、ブラウザのバージョンに合ったWebDriverを適用する必要があるため、”メンテを行なう”か”閉鎖的なネットワーク環境でのみ利用しメンテを行なわないか”の2択だと思います。
VBA標準のSendKeysステートメントを使う
VBAには標準で”SendKeysステートメント”というコマンドが用意されています。
要は、キーコードをVBAから送れる技術ですね。例えばEnterキーを押させたいのであれば「SendKeys "{ENTER}", True」をVBAで書くだけです。
まず、VBAからEdgeでgoogleを開きます。
1 |
Shell "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" & " " & "https://google.co.jp/", vbNormalFocus |
Chromeを開きたい場合はパスを差し替えてください。
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
SendKeysステートメントを利用しブラウザを操作していきます。
Edgeを起動しGoogleを開くと、検索ボックスにマウスカーソルが合わさった状態で開始されるため、検索したいワードを入力しEnterキーを送ってあげればググることもできます。
下記をそのままVBAにコピペし実行してみてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'sleep用関数定義 Sub VBAからEdgeを開いてGoogleで検索するテスト() Dim sWord As String sWord = "ExcelのVBAからedgeブラウザを操作する3つの方法" 'Edge起動 Shell "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" & " " & "https://google.co.jp/", vbNormalFocus Sleep (3000) SendKeys sWord, True SendKeys "{ENTER}", True End Sub |
あとはマウスやキー操作をトレースし、どういった操作をしたいかを組み合わせることである程度の自動化はできます。
環境構築が不要ですぐに使えて、1つ1つの操作を追っていくだけなのでごく簡単な作業であればおすすめです。
Webの体裁・仕様が買わなければメンテの頻度も低くて済みます。
デメリットとしては、getElementByIdなど特定の入力BOX・ボタンを指定できないため、Tabキー・Shiftキー・Enterキーを組み合わせてボタンを押すことになり、VBAを実行している間何もできない状態になります。
さらに、画面描画遅延でタブオーダーのタイミングがずれた場合、作業の精度が下がることがあります。
この点を理解し操作すれば特に問題ありません。実際、ぼくの勤務先でも日々業務で使っています。
SendKeys ステートメントの詳細(他のキー)は下記リンクを参照してください。