Skip to content

WebView2 VBA 示例 - Access 与 Excel 中使用 cWebView2Host

概述

演示如何在 VBA 宿主环境(Microsoft Access 和 Microsoft Excel)中使用 cWebView2Host。cWebView2Host 是 COM 可创建类,天然支持从任何 VBA 宿主调用,无需 VB6 运行时。

项目结构

下载源码 [ 注意:重新到bin目录注册 DLL 文件 ]

代码请到 VBMAN2 项目 demos/webview2/_vbaSamples 目录获取。

_vbaSamples/
  ├── BaseAccess.mdb         # Access 数据库文件(含窗体和 VBA 代码)
  └── BaseExcel.xlsm         # Excel 启用宏的工作簿(含 UserForm 和 VBA 代码)

核心代码解析

1. Access 窗体(BaseAccess.mdb)

在 Access 中创建一个空白窗体,进入 VBA 编辑器,粘贴以下代码:

vb
Option Compare Database

Dim wv As New cWebView2Host

Private Sub Form_Load()
    wv.Initialize Me.Hwnd, "https://vb6.pro"
End Sub

操作步骤

  1. 打开 BaseAccess.mdb
  2. 创建一个空白窗体,切换到设计视图
  3. 按 Alt+F11 打开 VBA 编辑器
  4. 在窗体模块中粘贴上述代码
  5. 切换到窗体视图运行

2. Excel UserForm(BaseExcel.xlsm)

在 Excel 中创建一个 UserForm,添加一个 Frame 控件(名称 Frame1),进入代码模块粘贴:

vb
Dim wv As New cWebView2Host

Private Sub UserForm_Initialize()
    wv.Initialize Me.Frame1, "https://vb6.pro"
End Sub

操作步骤

  1. 打开 BaseExcel.xlsm
  2. 按 Alt+F11 打开 VBA 编辑器
  3. 插入一个 UserForm,添加 Frame 控件(命名为 Frame1)
  4. 在 UserForm 代码模块中粘贴上述代码
  5. 运行 UserForm

功能说明

  1. Access 窗体嵌入

    • 使用 Me.Hwnd 获取 Access 窗口句柄
    • cWebView2Host 自动检测到 OForm 类名,切换为 MessageWindowAdapter
    • 无需任何额外配置即可工作
  2. Excel UserForm 嵌入

    • 使用 Me.Frame1 传入 Frame 控件对象
    • Initialize 接受 VBA 对象,自动获取 hWnd
    • WebView2 显示在 Frame 控件区域内
  3. VBA 中的简化声明

    • 使用 Dim wv As New cWebView2Host 自动实例化
    • VBA 的 New 关键字在首次访问时自动创建对象
    • 与 VB6 用法完全一致

技术要点

  1. COM 互操作:cWebView2Host 是 COM 可创建类,注册 vbman2_win32.dll 后,任何支持 COM 的宿主都能使用

  2. Access 自动适配:cWebView2Host 检测到 Access 的 OForm 窗口类名后,自动使用 MessageWindowAdapter(消息窗口 + 定时器轮询),避免对 Access 窗口子类化导致的崩溃

  3. Excel UserForm 使用 Frame:UserForm 本身也可以直接传 hWnd(Me.hWnd),传入 Frame 控件可以让 WebView2 限制在 Frame 区域内,与其他控件共存

  4. DLL 注册:使用前必须在目标机器上注册 vbman2_win32.dll:

    regsvr32 vbman2_win32.dll
  5. Access 的限制:MessageWindowAdapter 不支持宿主鼠标/键盘事件(HostMouse*、HostKeyDown* 等),但 WebView2 内容区域的事件和 BindUI/BindData 完全可用

应用场景

  1. Access:在数据库窗体中嵌入网页报表、在线文档、数据可视化图表
  2. Excel:在电子表格中嵌入实时数据面板、Web 仪表盘、交互式图表
  3. Word / PowerPoint:同样的 COM 注册方式,可在任何 Office VBA 中使用

扩展建议

  1. 在 Access 中可以使用 BindUI/BindData 将网页表单与数据库字段关联
  2. 在 Excel 中可以使用 JsRun 将工作表数据推送至 WebView2 渲染图表
  3. 使用 EnvironmentOptions.UserDataFolder 保存登录状态,避免重复登录
  4. 如果需要处理事件,改用 Dim WithEvents wv As cWebView2Host + Set wv = New cWebView2Host 声明方式

VB6及其LOGO版权为微软公司所有