10
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Excel VBAのユーザーフォームにWebView2を実装するプロジェクト

10
Last updated at Posted at 2026-03-18

やばいです。ブレイクスルーです。

IEサポート終了の話が出てから、Excel VBA開発者たちの中では
「モダンブラウザをVBAから如何に制御するか?」は大きな課題となっています。

昨今のスタンダードはSelenium VBAによる外部ブラウザの制御かと思いますが、
この度、ユーザーフォーム上にWebView2コントロールを配置する
というアプローチにおいて、大きな進展がありました。

これまではWebView2を使うと言っても.NET系アプリに実装したWebView2コントロールを、
そのアプリのCOMインターフェースを用意してタイプライブラリを作成し、
それをインストールした上で参照設定を通すというような非現実的な手法しかありませんでした。

そんな中、https://eschamali.github.io/StarterWebScrapingKit/#userform-powershell
こちらの記事で紹介されていますが、もっくんさんが重要な事実を発見しました。

その中で今回のプロジェクトの直接的なきっかけとなったのが、
C:\Program Files\Microsoft Office\root\Office16\ADDINS\Microsoft Power Query for Excel Integrated\bin
こちらのパス内に、WebView2のプログラム群(dll)が最初からインストール済みである
という事実です。

少し使い方を調べてみると、WebView2Loader.dllの関数は
DecleareステートメントによってVBAから直接呼び出せることが分かりました。

後はひたすら泥臭いコーディング&テストを重ねた末、
以下のような手順で、フォーム上に配置したWebVeiw2を制御できるようになりました。

<WebView2オブジェクト取得まで>
Declareステートメント宣言でWebView2Loader.dllのCreateCoreWebView2EnvironmentWithOptionsをコール

Microsoft.Web.WebView2.Core.dllがロードされ、
WebView2Environmentオブジェクトが作成される

標準モジュールに準備したWebView2Environmentの
作成完了通知を受け取る関数がコールされる

VBAからWebView2Environment.CreateCoreWebView2Controllerメソッドを呼ぶ

WebView2.exe内でWebView2Controllerが作成される

標準モジュールに準備したWebView2Controllerの
作成完了通知を受け取る関数がコールされる

VBAからWebView2Controller.GetWebView2メソッドでWebView2オブジェクトを取得

WindowsAPI等でChrome_WidgetWin_0クラスウィンドウの位置とサイズを調整

<WebView2の制御:イベントハンドラの登録例>
WebView2.add_NavigationCompletedを実行
(実行時にAddress of演算子でコールバック関数のポインタを渡す)

WebView2.Navigateメソッドを実行

ページ読み込みが完了したら、
標準モジュールに配置したイベントハンドラがコールされる

なお、WebView2Environmentオブジェクト取得以降の関数は、
全部DispCallFuncを使用してコールする必要がありますし、
コールバック関数をWebView2側から呼び出してもらうためには
COMの仮想関数テーブルをメモリ上に捏造しなければならないため、
VBA超上級者でないとライブラリ開発は難しいでしょう。

以下のリポジトリで開発を進めていきますので、
興味のある方は各種イベントハンドラの実装に挑戦してみてください。

また、このプロジェクトの果てに得られる機能として
・モダンなWebブラウザコントロールをユーザーフォーム配下に実装し、完全なコントロール権を得ること
・ユーザーフォーム上でのマウスホイールにるスクロール操作や右クリックによるコンテキストメニューが使えるようになること
・ActiveXコントロールに依存しないTreeViewやListViewコントロールを使えるようになること
などを期待しています。
もしかすると、ユーザーフォーム上のコントロールは全部WebView2上に描画するのが常識という時代が来るかもしれません。

10
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?