其他工作簿中的"单击"命令按钮
时间:2020-03-06 14:41:28 来源:igfitidea点击:
我正在尝试编写一个宏,该宏将"单击"另一个工作簿中的命令按钮。在不更改该其他工作簿中的任何代码的情况下?
非常感谢!
解决方案
我们可以使用Application.Run
来实现:
Run "OtherWorkbook.xls!MyOtherMacro"
我们确定我们指的是工作簿而不是工作表吗?
无论如何,如果我们"想遍历文件夹中的所有工作簿并对其进行操作"
如果我们要访问其他工作表,请按照以下步骤操作:
Worksheets("MySheet").YourMethod()
没有通过代码执行此操作的干净方法,因为按钮的click事件通常是其他工作簿的私有方法。
但是,我们可以通过打开工作簿,找到所需的控件,然后激活它并向其发送一个空格字符(等效于按下按钮)来自动执行单击VBA代码。
这几乎肯定是一个可怕的主意,它可能只会给我们和后代带来痛苦。我敦促我们找到一个更好的解决方案,但与此同时,这似乎行得通...
Public Sub RunButton(workbookName As String, worksheetName As String, controlName As String) Dim wkb As Workbook Dim wks As Worksheet Set wkb = Workbooks.Open(workbookName) wkb.Activate Dim obj As OLEObject For Each wks In wkb.Worksheets If wks.Name = worksheetName Then wks.Activate For Each obj In wks.OLEObjects If (obj.Name = controlName) Then obj.Activate SendKeys (" ") End If Next obj End If Next wks End Sub
无需尝试以编程方式单击该按钮,而是可以直接从代码中运行链接到该按钮的宏。
首先,我们需要找到单击按钮时运行的宏的名称。
为此,请打开包含命令按钮的工作簿。
右键单击命令按钮,然后选择"分配宏"
将显示"分配宏"对话框。
在对话框顶部的"宏名称"框中记下全名。
单击确定按钮。
我们在工作簿中需要调用该代码的代码应如下所示。
Sub Run_Macro() Workbooks.Open Filename:="C:\Book1.xls" 'Open the workbook containing the command button 'Change the path and filename as required Application.Run "Book1.xls!Macro1" 'Run the macro 'Change the filename and macro name as required 'If the macro is attached to a worksheet rather than a module, the code would be 'Application.Run "Book1.xls!Sheet1.Macro1" End Sub
没有:
这很容易做到:
- 在我们拥有Private Sub xyz_Click()的工作表ABC中,添加一个新的公共子例程:
Public Sub ForceClickOnBouttonXYZ()调用xyz_Click End Sub
。 - 在其他工作表或者模块中,添加代码:
Sheets("ABC").Activate Call Sheets("ABC").ForceClickOnBouttonXYZ
这就对了!!!
如果我们不希望屏幕闪烁或者显示任何活动,请在调用Sheets(" ABC")。ForceClickOnBouttonXYZ例程之前设置Application.ScreenUpdating = False,然后在其后立即设置Application.ScreenUpdating = True。