如何在VBA中为ListBox、ComboBox、Frame打开鼠标滚轮
VBA 不支持 ListBox、ComboBox、Frame 和 UserForm 的鼠标滚轮。 SonVuDev 的 VBA 鼠标轮只需 1 个 .bas 文件和 2 行代码即可解决,可在 Excel、Access、Word、PowerPoint 上运行。
此文章目前仅提供越南语和英语版本。正在显示英语版本。
您是否在 Excel、Access、Word 或 PowerPoint 中编写 VBA 宏并看到 ListBox / ComboBox / Frame 使用按键滚动但不使用鼠标滚轮滚动? 这不是软件错误,而是 VBA 过去的限制。 SonVuDev 的
MouseWheel for VBA 只需 1 .bas 文件和 2 行代码 即可解决此问题。 无需 MSForms 库,可在任何 VBA 主机上运行,支持 64 位和 32 位 Office。
为什么 VBA 不能用鼠标滚轮滚动?
VBA 不是 .NET 或 WinForms — 它是一种古老的编程语言,深度集成到 Office 中。 ListBox、ComboBox、Frame 等控件没有可用于捕获 WM_MOUSEWHEEL 事件的消息循环。 当您滚动时,Windows 将该消息发送到父窗口 (UserForm),但 VBA 不会将其转发到子控件。
结果:您必须手动拖动滚动条,或使用箭头键 — 当列表很长时非常不方便。
如何在 VBA 中打开鼠标滚轮
- 下载MouseWheel.bas 来自 SonVuDev.
- 导入文件 .ba 进入 VBA 项目(Alt+F11 → 文件 → 导入文件)。
- 在事件
UserForm_Initialize中,添加 2 行:Call MouseWheelEnable(Me)Call MouseWheelConfigure(Me, 3, True) - 运行表单 — 鼠标滚轮正在工作。
功能
- 不依赖于 MSForms: 续 rol 类型通过鸭子类型检测,无需额外参考。
- 支持所有主机 VBA: Excel、Access、Word、PowerPoint、VB6。
- 支持 64 位和 32 位: VBA7(Office 64 位)和 VBA6(Office 32 位)两者run.
- 可调节滚动速度: 使用
MouseWheelConfigure设置 每卷滚动的行数。 - 自我修复: 如果挂钩安装失败,工具会再次尝试 — 无卡住状态。
- 安全脱钩: 离开控件或关闭表单时,挂钩会被干净地移除。
- 可选诊断: 打开
EnableDebug或MWLog以查看活动日志。 - 平台功能报告:
IsWheelSupported和PlatformName表示当前系统是否支持。
什么时候应该使用它?
- VBA Form ListBox/ComboBox 是否包含数百个rows.
- 最终用户习惯使用鼠标滚轮,不想使用滚动条。
- 您想要改善用户体验 无需重写为 .NET.
结论
MouseWheel for VBA 是一个紧凑、无依赖性、易于集成的解决方案。 如果您正在编写 VBA 并希望您的窗体可以用鼠标滚动,那么这是正确的工具。