首页 > 解决方案 > 在 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 timeSet objButton = Worksheets(1).OLEObjects("MyButton").Object.

这只是一个 VBA Excel 错误吗?如果是这样,是否有任何解决方法?难道我做错了什么?如果是这样,请告诉我。

标签: excelvba

解决方案


推荐阅读