Office関連

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

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

先日、Microsoftから2022年6月にInternet Explorer 11デスクトップアプリケーションのサポートが終了されるとの発表がありました。

SNSでも大きな話題となっていましたが、VB/VBA界隈で著名な魔界の仮面弁士( @Benshi_Orator )さんが下記ツイートをされていました。

それに対するユスキィ( @ms_yuhara )さん ※マイクロソフトのブラウザー (Microsoft Edge / IE) の中の人 のご回答が下記になります。

もちろん、2021年5月時点での回答になりますので、実際には変更される可能性もあると思いますが、非常に参考になりました。

このIE11のサポート終了の知らせを受けて、MSDNフォーラムでもさっそくスレッドが立っていました。

上述の弁士さん含めて、何人かの方から回答が寄せられていて、いずれも参考になります。
(弁士さんにいたっては、すでにウィンドウからHTMLDocumentオブジェクトを取得するコードまで書かれています。)

このスピード感たるや、さすがと言わざるを得ません!素晴らしい!!✨
弁士さんのコードを用いれば、IEモードで表示中のページを操作できるようになるでしょう。

一方、ユスキィさんからは、“WebBrowserコントロールは引き続きサポートされるだろう”とのツイートもありました。

折角なので私も、動的に追加したWebBrowserコントロールでWebページ操作を行うマクロを書いてみました。

Option Explicit

'動的にWebBrowserコントロールを追加してWebページ表示を行うサンプル
'※[VBA プロジェクト オブジェクト モデルへのアクセスを信頼する]要有効
Public Sub Sample()
  Dim frmBrowser As Object
  Const ComponentName = "UserForm1"
  Const ControlName = "WebView"
  Const CtrlWidth = 640
  Const CtrlHeight = 480
  
  '事前にUserForm削除
  On Error Resume Next
  With Application.VBE.ActiveVBProject.VBComponents
    .Remove .Item(ComponentName)
  End With
  On Error GoTo 0
  
  'UserForm(VBIDE.VBComponent)追加
  With Application.VBE.ActiveVBProject.VBComponents.Add(3) 'vbext_ct_MSForm
    .Name = ComponentName
    .Properties("Caption").Value = "WebBrowser"
    .Properties("BackColor").Value = &HFFFFFF
    .Properties("Width").Value = CtrlWidth
    .Properties("Height").Value = CtrlHeight
    .Properties("StartUpPosition").Value = 1
    .Properties("ShowModal").Value = False
    
    'WebBrowser(MSForms.Control)追加
    With .Designer.Controls.Add("Shell.Explorer.2")
      .Name = ControlName
      .Top = 0
      .Left = 0
      .Width = CtrlWidth
      .Height = CtrlHeight
    End With
  End With
  
  Set frmBrowser = UserForms.Add(ComponentName)
  frmBrowser.Show
  
  'WebBrowser操作
  With frmBrowser.Controls(ControlName)
    '気休め程度にヘッダーにUser-Agent追加
    .Navigate2 _
      URL:="https://www.google.com/?hl=ja", _
      Headers:="User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36 Edg/90.0.818.66"
    Do While .Busy = True Or .ReadyState <> 4
      DoEvents
    Loop
    .Document.getElementsByName("q")(0).Value = "初心者備忘録"
    .Document.getElementsByName("btnK")(0).Click
  End With
End Sub

UserFormを動的に追加して、その上にWebBrowserコントロールを挿入しているだけのコードで、使い勝手はあまり良くありませんし、VBコンポーネントを動的に追加する都合上、「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」を有効にする必要が有ります(「Visual Basic Editor の自動化」参照)。

イベントを使いたいのであれば、下記コードのようにWithEventsを使用すれば良いでしょう。

'※ThisWorkbookに記述
'※[Microsoft Internet Controls]要参照
Option Explicit

Private WithEvents WebView As SHDocVw.WebBrowser

Public Sub Sample2()
  Dim frmBrowser As Object
  Const ComponentName = "UserForm1"
  Const ControlName = "WebView"
  Const CtrlWidth = 640
  Const CtrlHeight = 480
  
  '事前にUserForm削除
  On Error Resume Next
  With Application.VBE.ActiveVBProject.VBComponents
    .Remove .Item(ComponentName)
  End With
  On Error GoTo 0
  
  'UserForm(VBIDE.VBComponent)追加
  With Application.VBE.ActiveVBProject.VBComponents.Add(3) 'vbext_ct_MSForm
    .Name = ComponentName
    .Properties("Caption").Value = "WebBrowser"
    .Properties("BackColor").Value = &HFFFFFF
    .Properties("Width").Value = CtrlWidth
    .Properties("Height").Value = CtrlHeight
    .Properties("StartUpPosition").Value = 1
    .Properties("ShowModal").Value = False
    
    'WebBrowser(MSForms.Control)追加
    With .Designer.Controls.Add("Shell.Explorer.2")
      .Name = ControlName
      .Top = 0
      .Left = 0
      .Width = CtrlWidth
      .Height = CtrlHeight
    End With
  End With
  
  Set frmBrowser = UserForms.Add(ComponentName)
  frmBrowser.Show
  
  Set WebView = frmBrowser.Controls(ControlName)
  With WebView
    '気休め程度にヘッダーにUser-Agent追加
    .Navigate2 _
      URL:="https://www.google.com/?hl=ja", _
      Headers:="User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36 Edg/90.0.818.66"
    Do While .Busy = True Or .ReadyState <> 4
      DoEvents
    Loop
    .Document.getElementsByName("q")(0).Value = "初心者備忘録"
    .Document.getElementsByName("btnK")(0).Click
  End With
End Sub

Private Sub WebView_DocumentComplete(ByVal pDisp As Object, URL As Variant)
  Debug.Print "DocumentComplete:" & URL
End Sub

以上のように、IE11のサポート終了後は、基本的にはIEオートメーションによる操作(CreateObject(“InternetExplorer.Application”))はできなくなると思われますが、IEモードのウィンドウからHTMLDocumentオブジェクトを取得したり、WebBrowserコントロールを使用したりと、何らかの方法でIEによるWebページの表示・操作を行う手段は残されるようです。
(それすら2029年をひとつの節目と捉えた方が良いようですが)

ただ、MSDNフォーラムの回答にもありましたが、IEに対応していないWebサイトも増えてきましたし、今後もさらに増え続けていくはずですので、マクロからブラウザーの操作を行う際は、いまさら頑張ってIEをどうにかするよりは、Selenium WebDriverを使ってMicrosoft Edgeを操作するなり、公式に用意された手段を用いた方が良いだろうと、個人的には思います。あるいは、ブラウザーの操作をPower Automate DesktopのようなRPAソリューションに切り替えるのも一つの方法と言えるでしょう。

今回、魔界の仮面弁士さんとユスキィさんの一連のツイートが、IEを操作する系のVBAマクロが今後どのようになるのかを考える上で非常に参考になるものでしたので、大変勝手ではありますが、まとめさせていただきました。

2021/5/23 追記:
IEオートメーション系マクロの代替方法について、下記記事でもう少し具体的にまとめてみました。

Windows 10 May 2021 Update(21H1)をクリーンインストールしてみました。前のページ

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

関連記事

  1. Office関連

    各ページを画像に変換するWordマクロ

    Excel MVPの伊藤さんがブログで、WordのPageオブジェクト…

  2. Office アドイン

    Visio JavaScript APIで遊んでみました。

    前回の記事でプレビュー版がリリースされた「Visio JavaScri…

  3. アイコン一覧

    Office 365アイコン(imageMso)一覧(G)

    Office 365のデスクトップ版Officeアプリケーション(Wo…

  4. Office関連

    VBAでブラウザーを操作するSeleniumWrapperVBAの紹介

    Internet Explorerのサポートが終わり、VBAマクロから…

  5. Office アドイン

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

    昨年末に書いた記事で「アドイン コマンド」を紹介しているのですが、知ら…

コメント

  • コメント (2)

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

    • IKA
    • 2021年 7月 13日 9:15am

    WebBrowserコントロールですが、手動であらかじめ追加して使うことはできるのでしょうか?

Time limit is exhausted. Please reload CAPTCHA.

Translate

Chinese (Simplified)Chinese (Traditional)EnglishFrenchGermanJapaneseKoreanRussianSpanish

最近の記事

アーカイブ

PAGE TOP