msedge.exe を UserForm に直接埋め込む
WebView2は、極端な話、Edgeから、URLバーやウィンドウ枠がない状態にしたものみたいなもの。
実はある引数を足してちょこっと簡単なAPIを使えば簡単に実現可能だ。
皆さんのPCに入っている Microsoft Edge(msedge.exe)そのもの を、UserFormに埋め込んでしまう力技です。
見た目は完全に WebView2 コントロール。しかも外部ツール一切不要です。

▲ Google ページが UserForm 内に表示された様子。アドレスバーなし・タブなし = 完全 WebView2 ルック
構成と処理の流れ
Excel と Edge だけで完結する、非常にシンプルでスマートな方式です。
Excel (VBA) ↔ CDP via Pipe(標準入出力パイプ) ↔ Edge.exeWebSocket も Node.js も不要。VBA ↔ ブラウザの2者間だけで完全に完結します。
実装のポイント
Edge 起動時に、以下の起動引数を付与するのがキモです:
--remote-debugging-pipe --kiosk| 引数 | 効果 |
|---|---|
--remote-debugging-pipe | 標準入出力パイプ経由でCDPコマンドを送受信。ポートを開かないため、ネットワーク制限環境でも安全 |
--kiosk | アドレスバー・タブ・ウィンドウ枠が消滅。見た目が完全にWebView2コントロールに |
その後、VBAの Windows API を使ってEdgeのウィンドウハンドルを取得し、UserFormの子ウィンドウとして強引に取り込みます。開通したパイプ経由でCDP-JSONコマンドを流し込むことで、スクレイピングや画面操作が可能です。
本キットでは KioskMode:=fullscreen などで同等の起動を行います(設定シート/StartCDPModeContext)。
デモコードの動作内容
TIP
デモでは最初に このツールのGitHubページ が表示されます。
UserForm上部のURLテキストボックスに任意のURL(例:https://www.google.com)を入力してEnterを押すと、ページ遷移できることが確認できます。
Demoコードを見る(ExcelのユーザーフォームにEdgeを埋め込む)
Sub ExcelのユーザーフォームにEdgeを埋め込む()
'1. CDPでEdgeを起動(Kioskモード = ウィンドウ枠なし)
Dim 実質WebView2 As CDPContext
Set 実質WebView2 = ShSetting01_StartBrowser.StartCDPModeContext(KioskMode:=fullscreen)
実質WebView2.navigate "https://github.com/Eschamali/StarterWebScrapingKit"
'2. フォームをロード(まだ表示はしない)
Load EdgeInExcelForm
'3. 誘拐(ドッキング)処理を実行させる!
実質WebView2.InheritanceCDPCore.sleep
If Not (EdgeInExcelForm.AttachEdge(実質WebView2)) Then
MsgBox "Edgeのハンドル情報の取得に失敗しました", vbCritical
Exit Sub
End If
'4. フォームを表示
EdgeInExcelForm.show
'5. ブラウザを正常に閉じる
実質WebView2.InheritanceCDPBrowser.quit
End Sub同梱デモ: Demo_CDP.ExcelのユーザーフォームにEdgeを埋め込む
デメリット:入力フォーカス問題
フォーカスが正しく当たらない問題があります
VBAの UserForm_Activate イベントは、UserForm同士の切り替えでしか動作しません。
そのため、他のWindowsアプリからUserForm(の中にあるEdge)にフォーカスを戻した際、正しくフォーカスが当たらないことがあります。
現状は「特定領域にマウスを当てて強制的にフォーカス処理を走らせる」という泥臭い工夫で対処しています。

