【发布时间】:2016-08-24 10:57:33
【问题描述】:
我编写了一个 VBA-Excel 代码,通过按下放置在工作表上的 ActiveX 控件按钮来执行。
我不想总是按下它让它运行,而是想根据另一个宏(单独的)来控制它的调用。
是否有可能,如果有,请分享有关它的见解。
这是我的工作表的样子,我想从单独的宏中调用该按钮:
【问题讨论】:
-
为什么不能直接调用click事件呢?
-
我想自动化这个过程
我编写了一个 VBA-Excel 代码,通过按下放置在工作表上的 ActiveX 控件按钮来执行。
我不想总是按下它让它运行,而是想根据另一个宏(单独的)来控制它的调用。
是否有可能,如果有,请分享有关它的见解。
这是我的工作表的样子,我想从单独的宏中调用该按钮:
【问题讨论】:
为了运行附加到 ActiveX 控件的宏,您可以使用以下命令直接调用 sub:
CallByName Worksheets("Sheet1"), "CommandButton21_Click", VbMethod
请注意,(默认情况下)Excel 将在工作表上为按钮创建一个Private Sub。如果您希望从模块中调用这些子程序,则必须预先删除 Private。另请注意,子名称必须为NameOfTheButton_Click。
因此,如果上述代码位于模块中的子目录中,并且您想让它工作,那么工作表上的代码可能是(例如):
Sub CommandButton21_Click()
MsgBox "gotcha"
End Sub
如果您希望为Sheet1 上的所有按钮调用所有宏,则可以使用以下代码:
Option Explicit
Public Sub tmpSO()
Dim Obj As OLEObject
For Each Obj In Worksheets("Sheet1").OLEObjects
If TypeName(Obj.Object) = "CommandButton" Then
CallByName Worksheets("Sheet1"), Obj.Name & "_Click", VbMethod
End If
Next Obj
End Sub
再次确保Sheet1 上的所有订阅者都不是Private。否则,这些 subs 不能从模块调用,而只能从位于 Sheet1 的 sub 调用。
【讨论】: