Office関連

IEサポート終了でVBAマクロはどうなるの?(2)

※下記情報は2021年5月時点の情報で、今後状況が変わっていく可能性があります。

前回の記事でInternet Explorer 11デスクトップアプリケーションのサポート終了に伴ってVBAマクロ周りがどう変わるのか、魔界の仮面弁士さんとユスキィさんのツイートを中心にまとめてみました。

早い話が

Set objIE = CreateObject("InternetExplorer.Application")

Set objIE = New InternetExplorer

といったIEオートメーション系のマクロが使えなくなるわけですが、ではどうすれば良いのか?、今回はもう少し突っ込んで考えてみたいと思います。

マクロによるブラウザーの操作を止める

まず一つ目、マクロによるブラウザーの操作自体を止めてしまう方法が考えられます。
最近では公式にAPIを提供しているWebサービスも多く、APIを実行することによってブラウザーを操作しなくても目的の処理を実行できる可能性がありますし、Power AutomateやZapierといったiPaaSも非常に多くのサービスに対応しているため、それらを活用すればコードを書く必要すら無くなるかもしれません。
あるいは、WinActorやPower Automate Desktopといった、RPAソリューションにブラウザーの操作(もちろんIEを除く)を任せてしまうのも一つの手段と言えるでしょう。

Seleniumを使う

Windows 10の標準ブラウザーであるMicrosoft Edgeには、操作を自動化するための「WebDriver」という仕組みが用意されています。

Seleniumは現在最も広く使われている、Webブラウザの自動化・テストフレームワークです。 多くの言語をサポートしており、JavaやC#などの言語から、Webページを開いたり要素の検証ができます。 そのためWebサービスのEnd-to-end (E2E) テストの自動化で主に利用されています。

Selenium 1 (Selenium RC) と呼ばれていた時代は、ブラウザを操作するためにSelenium CoreというJavaScriptをブラウザ上でロードしてました。 しかしブラウザのセキュリティ強化により、Selenium CoreのJavaScript実行が難しくなったため、モダンブラウザではSelenium Coreが動かなくなりました。

SeleniumのヘビーユーザーだったGoogleは、Selenium Coreとは別のアプローチをとるため、WebDriverというプロジェクトをスタートしました。 WebDriverはJavaScriptではなく、各ブラウザが実装する ドライバ によってブラウザを操作します。 クライアントは標準化されたAPIによってブラウザを制御できます。

https://i-beam.org/2019/09/08/webdriver-with-curl-01/ より

WebDriver単体でもJSONデータを投げればブラウザーを操作できますが、各言語別に用意されたライブラリを活用した方が効率的です。

下記記事では.NET用のライブラリを使ってPowerShellでEdgeの操作を行うサンプルを載せています。

VBA向けには(恐らく)有志の方が開発された「SeleniumBasic」があるので、こちらを使うことによって、Microsoft Edge含めてブラウザーを操作することができます。

具体的な使い方は下記のサイトが分かりやすいかと思います。
(古い情報になりますが、当ブログでも紹介しています。)

コードの書き方が比較的IEオートメーションに近いので、コードを修正する範囲を抑えられる点がSeleniumBasicの利点と言えるでしょう。

ただし、SeleniumBasicの更新は数年止まっています。
同梱されているWebDriverの入れ替えで何とか動くようにはなりますが、このまま更新されなければ今後動作しなくなる可能性がありますので、その点はご注意ください。
(ソースは公開されているので、SeleniumBasic自体を自分で修正するのも有りかもしれませんが・・・)


2021/08/23 追記:
うえぞうさん( @uezochan )がWebDriverを使ってブラウザー操作を行うSeleniumクライアント「TinySeleniumVBA」を公開されています。

SeleniumBasicと違って端末にインストールする必要は無く、必要なモジュールをインポートするだけで使える点は大きなメリットと言えます。
ライセンス含め、詳細は上記GitHubをご参照ください。


2021/08/29 追記:
Edgeのバージョンに合わせてWebDriverをダウンロードするVBAマクロについて記事を書きました。SeleniumBasicやTinySeleniumVBAと組み合わせて使えるかと思います。


2021/12/23 追記:
TinySeleniumVBAをインポートする際の注意事項をやじゅ(@yaju)さんがまとめてくださっていますので下記記事をご参照ください。

DevTools ProtocolによるEdgeの操作

EdgeやChromeはDevTools Protocolを使ったオートメーションにも対応していて、WebDriver不要でブラウザーを操作できます。

CodeProjectで有志の方がVBA向けのライブラリ(ライセンス:CPOL)を公開されており、こちらを使うことで簡単にVBAからEdgeを操作できます。

使用方法
  • CodeProjectからZipファイルをダウンロードします。
  • Zipファイルを解凍し中に含まれるモジュールをインポートします。
  • Dictionaryを使用するため、「Microsoft Scripting Runtime」を参照します。
  • Edgeを終了した状態でコードを実行します。

2021/10/01 追記:
具体的な使い方を別の記事として簡単にまとめてみました。

IEモードで表示されたWebページを操作する

「ブラウザーの操作自体を止めてAPIを叩けば良い。」
「そもそも未だにIE使っているのが間違っている。」

そう言うのは簡単ですが、現実問題としてはそう上手く切り替えられない場合も多いでしょう。

「顧客都合でどうしても“IE限定”のシステムを使わなければならないが、手動で作業していたら何時間掛かるか分からないのでマクロで操作している。」
「止められるならとっくに止めている!」

そう悩む管理者の方も多いだろうと思います。
そういった方向けに、Edgeでは「IEモード」が用意されています。

このIEモードを使うことで、Edge内でIE用のページを開くことが出来るようになるわけですが、基本的にはIEモードで表示したWebページを操作することは難しく、ユスキィさんが下記ツイートされているように、IEモードではこれまで使えていたShellWindowsからのブラウザー操作ができません。

ただ、IEモードのウィンドウからHTMLDocumentオブジェクトの取得はできるため、VBAマクロからの操作も一応可能であり、そのためのコードを魔界の仮面弁士さんがすでに書かれています。

このコードを活用すればIEモードで表示したWebページを操作できますが、コードを見れば分かる通りWindows APIを呼び出す必要がある複雑なコードになっているので、こちらの方法はあくまでも“最終手段”として考えておいた方が良さそうです。


2021/08/29 追記:
UI Automationを使用してInternet Explorer_Serverウィンドウのハンドルを取得するマクロを書きました。

WebBrowserコントロールを使う

WebBrowserコントロールは、現時点では少なくとも2029年まではサポートされるようなので、使い勝手が良いかどうかは別として、UserFormにWebBrowserコントロールを挿入すれば、IE限定ページの表示や操作ができるでしょう。

前回の記事では、動的にUserFormを追加し、その上にWebBrowserコントロールを挿入してWebサイトの表示・操作を行うコードを紹介していますが、必ずしも動的に作成する必要はありません。

Power Queryを使う

.NETラボの2021年6月勉強会で、Microsoft MVPの村地さんが、スクレイピングによるデータの取得であれば、IEオートメーションの代替として「Power Query」が使えることを紹介されていました。

Internet Explorer サポート提供終了で変わること変わらないこと from 彰 村地

Power Queryの使い方に関しては、下記サイトが参考になるかと思います。

以上、IEオートメーションの代替方法をいくつか考えてみました。
前回の記事でも書きましたが、いまさらIEの操作にこだわるよりも他の手段を検討した方が良いだろうと個人的には思うのですが、“IE限定”でAPIも用意されていないシステムもまだまだ残っており、マクロでブラウザーを操作せざるを得ない状況の方も多いでしょう。

その場合はIEモードの操作やWebBrowserコントロールの活用といった抜け道もあるわけですが、IE非対応のWebサイトが増えてきている現状を踏まえると、やはり早急に脱・IE、脱・IE操作マクロに踏み切った方が良いだろうと思います。
(使用OSをIE11サポート終了の対象となっていない、Windows 10 LTSC等に切り替える方法も一応ありますが・・・💦)


編集履歴

  1. 2021/07/06:「Power Queryを使う」を追加しました。
  2. 2021/08/23:「TinySeleniumVBA」を追加しました。
  3. 2021/08/29:WebDriverをダウンロードするマクロとInternet Explorer_Serverウィンドウのハンドルを取得するマクロを追加しました。
  4. 2021/09/28:「DevTools ProtocolによるEdgeの操作」を追加しました。
  5. 2021/12/23:TinySeleniumVBAの関連リンクを追加しました。

IEサポート終了でVBAマクロはどうなるの?前のページ

ときメモは貴重なコミュニケーションツールだったことを思い出した件次のページ

関連記事

  1. Windows 10

    【2017年8月版】起動中のMicrosoft EdgeからタイトルとURLを取得するC#コード

    当ブログでは、EdgeからタイトルとURLを取得するコードについて、い…

  2. Office関連

    外部からOutlookのマクロを実行するマクロ

    外部からOutlookのマクロを実行するマクロ今回は外部からO…

  3. Office関連

    メールを閉じたときに指定したフォルダに移動するOutlookマクロ

    先日Twitterで @akashi_keirin さんが下記ツイート…

  4. Office関連

    Wordマクロで文字数を取得する方法をまとめてみました。

    「蛍光ペンでマークした部分の文字数をカウントするWordマクロ」で蛍光…

  5. Office関連

    古い形式のWordテンプレートを新しい形式に一括変換するVBScript

    古い形式のWordテンプレート(dot)を新しい形式(dotx,dot…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

Translate

Chinese (Simplified)Chinese (Traditional)EnglishFrenchGermanJapaneseKoreanRussianSpanish

最近の記事

アーカイブ

PAGE TOP