Vba 如何以编程方式单击其他工作簿中的ActiveX按钮?

Vba 如何以编程方式单击其他工作簿中的ActiveX按钮?,vba,excel,activex,Vba,Excel,Activex,我有一个工作簿Wbk1,其中一张工作表有一个ActiveX按钮。我想从另一个工作簿,Wbk2运行按钮的关联子项。仅仅将Sub的代码复制到Wbk2是不实际的,因为它反过来又从Wbk1调用一系列函数。我尝试了以下方法: Sub pushButton() Dim obj As OLEObject Dim btn As MSForms.CommandButton For Each obj In Wkb1.Sheets("testSheet").OLEObjects If TypeOf obj.O

我有一个工作簿
Wbk1
,其中一张工作表有一个ActiveX按钮。我想从另一个工作簿,
Wbk2
运行按钮的关联子项。仅仅将Sub的代码复制到
Wbk2
是不实际的,因为它反过来又从
Wbk1
调用一系列函数。我尝试了以下方法:

Sub pushButton()

Dim obj As OLEObject
Dim btn As MSForms.CommandButton

For Each obj In Wkb1.Sheets("testSheet").OLEObjects
  If TypeOf obj.Object Is MSForms.CommandButton Then
    set btn=obj.Object
    debug.print btn.Caption 'used to test whether or not For loop is picking up button
    obj.Activate
    SendKeys " "
  End If
Next

End Sub
这不仅是一个不雅观的
SendKeys()
hack,而且不起作用;按钮获得焦点,但没有按下。我知道For循环正确地遍历了对象,包括CommandButton,因为我可以选择按钮的标题。如何从
Wbk2
单击此按钮(从而运行其专用子按钮)

编辑:实际文件名的格式为123A_1.0-2.0.xlsm。我认为句号会给下面的评论和回复中发布的解决方案带来一些麻烦,因为当我删除句号时,这些技术是成功的。

Application.Run (wb1.Name & "!MacroName")

如果您知道该过程的名称和位置,则可以使用
Application.run
例如:
Application.run“temp.xlsm!Sheet1.CommandButton1\u单击“
EDIT snap!”@TimWilliams,谢谢,这很有帮助,当我使用文件名“temp.xlsm”运行它时,它可以工作,但我的实际文件名会导致一些问题,因为它有句点;下面是我对nutsch答案的回应。很抱歉,没有在最初发布的问题中包含此内容。请参见此处:您需要在文件名周围加上单引号。谢谢,这解决了问题。这很有帮助,尽管我还需要在按钮所在的位置包含工作表名称,如
Application.Run“Wbk1!表1.宏名称
。问题是我的实际工作簿名称中有句点,例如Wbk1.0.xlsm。无论是
Wbk1.0!表1.宏名称
nor
Wbk1.0.xlsm!Sheet1.MacroName
成功运行该过程,因为第一个给出了“找不到文件”错误,第二个给出了“对象的方法”“运行”“应用程序”“失败”错误。