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自体を自分で修正するのも有りかもしれませんが・・・)

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

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

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

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

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

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

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

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

WebBrowserコントロールを使う

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

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

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

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

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

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

関連記事

  1. Office関連

    Re: 【Wordマクロ】Word起動時に、前回終了時に開いていたファイルを表示

    Word MVPの新田さんがブログで面白い記事を書かれていました。…

  2. アイコン一覧

    Office 2013 アイコン一覧(W)

    ・Office 2013 アイコン一覧 NUM…

  3. Office関連

    Google翻訳で文字列を翻訳するVBAマクロ(IE操作版)

    下記記事にあるように、ニューラルネット機械翻訳の導入によって、Goog…

  4. Office関連

    Office 2016 Preview for Windowsのサポート情報まとめ

    「Office のサポート ページ - support.office.…

  5. Office関連

    Word 2013のアクセス キー一覧[PDF]

    前回の記事でWord 2013のアクセス キーをまとめたものを公開しま…

  6. Windows 10

    【2017年3月版】Microsoft Edgeでブックマークレットを使う方法

    2015年8月にMicrosoft Edgeでブックマークレットを使う…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

PAGE TOP