Office関連

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

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

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

早い話が

Set objIE = CreateObject("InternetExplorer.Application")

Set objIE = New InternetExplorer

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


2022/05/16 追記:
公式ブログにIEサポート終了後もCOMオートメーション(「CreateObject(“InternetExplorer.Application”)」を使うようなシナリオ)が機能するとの記載がありました。

自動化を通じて、 IE を利用するアプリケーションで問題が発生しました。これは修正されるのでしょうか? (2022 年4 月14日 更新)

IE11アプリケーションのサポート終了の一環として、特定の COM オートメーション シナリオが破損したケースが報告されていました。対象の IE COM オブジェクトは、Windows 11 November 2021 Update の「C」リリースと Windows 10 March 2022 Update の「B」リリースで元の機能に復元されています。COM シナリオは、2022 年 6 月 15 日以降に IE11 デスクトップ アプリケーションが無効化された後も引き続き機能します。上記の更新プログラムのインストール後も問題が発生する場合は、App Assure に連絡して修復サポートを受けてください。

https://blogs.windows.com/japan/2022/02/21/internet-explorer-11-desktop-app-retirement-faq/ より

ただし下記記事中でも記載していますが、これはあくまでも救済措置であり、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ウィンドウのハンドルを取得するマクロを書きました。


2022/3/28 追記:
IEのオートメーションについて、一部方針が変更されたようです。

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の関連リンクを追加しました。
  6. 2022/03/28:魔界の仮面弁士さんとユスキィさんのツイートを追加しました。
  7. 2022/05/16:冒頭の注意事項を追加しました。

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

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

関連記事

  1. Office関連

    [Outlook]仕分けルールでスクリプト(マクロ)を実行する。

    Msdn フォーラムにあった質問関連でメモを残しておきます。…

  2. Office関連

    [リボン・カスタマイズ]アクティブシートにより表示するグループを切り替える。

    Excelで、選択しているシートによって表示するグループを切り替えたい…

  3. Office アドイン

    [Office用アプリ]第三回 Apps for Office 勉強会で登壇しました。

    10月4日(土)に開催されたOffice 用アプリの勉強会「第3回 A…

  4. Office関連

    VBA Word 97/98ハンドブックを購入しました。

    ブックオフにあった「VBA Word 97/98ハンドブッ…

  5. Office アドイン

    [Officeアドイン]アドイン コマンド(Add-In Commands)の紹介

    前回の記事は“Office アドイン”のAdvent calendar…

  6. Office関連

    [Excel]別インスタンスからの貼り付け時のダイアログを非表示にする方法

    Msdn フォーラムに「excel 2010 貼り付けで警告メッセージ…

コメント

  • コメント (1)

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

    • ムラセ
    • 2022年 8月 07日 2:43pm

    ここまでまとまっているページは他にないですね。
    ありがとうございます。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP