excel - 在 VBA 中添加 OLE 对象命令按钮会阻止它执行代码
问题描述
以下脚本应该创建一个按钮,并通过代码使其在单击时执行代码。问题是当在单独的子例程中执行时,我无法让子例程工作。
Dim cmdArray As New CmdHandler
Dim i As Integer
Sub AddButton()
Dim oTB As Object
Set oTB = Worksheets(1).OLEObjects.Add(ClassType:="Forms.CommandButton.1")
oTB.Name = "MyButton"
End Sub
Sub AddEvent()
Dim objButton As CommandButton
Set objButton = Worksheets(1).OLEObjects("MyButton").Object
Set cmdArray.CommandButtonEvent = objButton
End Sub
该子例程AddButton
在 Excel 工作表中创建一个命令按钮,并AddEvent
与以下类模块一起使该按钮显示一个带有“成功!”的消息框 点击时。
' Class module called "CmdHandler"
Public WithEvents CommandButtonEvent As CommandButton
Private Sub CommandButtonEvent_Click()
MsgBox "Success!"
End Sub
如果我首先AddButton
手动运行子例程然后AddEvent
. 但是在单独的子例程中连续运行它们无法使按钮显示消息框。
Sub Execute()
AddButton ' The button is created as normal
AddEvent ' Some part of the AddEvent subroutine fails
End Sub
我在调试这个问题时遇到了困难,因为在逐步完成时F8
,我遇到 Excel 告诉我程序Can't enter break mode at this time
在Set objButton = Worksheets(1).OLEObjects("MyButton").Object
.
这只是一个 VBA Excel 错误吗?如果是这样,是否有任何解决方法?难道我做错了什么?如果是这样,请告诉我。
解决方案
推荐阅读
- python - MLFlow 项目找不到 conda 可执行文件
- data-structures - 为什么在未排序数组中实现的优先级队列中的 Find-Minimum 操作只需要复杂度 = O(1) ?
- visual-studio-code - 有没有办法将 VS Code 片段文件放在非标准文件夹中并让 VS Code 使用它?
- configuration - 无法通过 carbon.xml 进行配置
- python - 为了创建字典,这些函数在做什么?
- c# - 如何进行并行数据库调用并绑定到模型 ASP.NET Core MVC
- unity3d - HoloLens 配套地图
- angular - 动态组件可以在表单中用作表单字段并且验证仍由父组件处理吗?
- swift - 以编程方式不改变宽度的 UISlider
- symfony4 - Symfony 4 handleRequest 运行查询