2

我正在尝试编写一个宏来“单击”另一个工作簿中的命令按钮。那可能吗?不更改其他工作簿中的任何代码?

4

7 回答 7

4

对于另一个工作簿中的 ActiveX 按钮:

Workbooks("OtherBook").Worksheets("Sheet1").CommandButton1.Value = True

对于另一个工作簿中的 MSForms 按钮:

Application.Run Workbooks("OtherBook").Worksheets("Sheet1").Shapes("Button 1").OnAction
于 2015-10-26T20:47:42.570 回答
1

您可以Application.Run为此使用:

Run "OtherWorkbook.xls!MyOtherMacro"
于 2008-09-24T22:31:14.550 回答
1

可以直接从您的代码运行链接到该按钮的宏,而不是尝试以编程方式单击该按钮。

首先,您需要找到单击按钮时运行的宏的名称。

为此,请打开包含命令按钮的工作簿。

右键单击命令按钮并选择“分配宏”

将显示“分配宏”对话框。

在对话框顶部的“宏名称”框中记下全名。

单击确定按钮。

您的工作簿中需要调用代码的代码应如下所示。

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
于 2008-09-24T23:55:31.693 回答
0

你确定你的意思是工作簿而不是工作表?无论如何,如果您“想要遍历文件夹中的所有工作簿并对每个工作簿执行操作

如果您想访问另一张工作表,请执行以下操作:

Worksheets("MySheet").YourMethod()
于 2008-09-24T22:31:51.037 回答
0

不:

这很容易做到:

  1. 在您拥有 的工作表 ABC 中Private Sub xyz_Click(),添加一个新的公共子例程:

    Public Sub ForceClickOnBouttonXYZ()
        Call xyz_Click
    End Sub
    
  2. 在您的其他工作表或模块中,添加代码:

    Sheets("ABC").Activate
    Call Sheets("ABC").ForceClickOnBouttonXYZ
    

这就对了!!!如果您不希望屏幕闪烁或显示任何活动,请Application.ScreenUpdating = False在调用Sheets("ABC").ForceClickOnBouttonXYZ例程之前设置,然后Application.ScreenUpdating = True在它之后设置。

于 2010-04-14T19:29:28.710 回答
0

我遇到了与上述类似的问题,花了一段时间才弄清楚,但这就是我所要做的。

在 Sheet1 上,我创建了一个带有以下内容的按钮:

    Private Sub cmdRefreshAll_Click()
         Dim SheetName As String

         SheetName = "Mon"
         Worksheets(SheetName).Activate
         ActiveSheet.cmdRefresh_Click

         SheetName = "Tue"
         Worksheets(SheetName).Activate
         ActiveSheet.cmdRefresh_Click

'    "I repeated the above code to loop through a worksheet for every day of the week"

    End Sub

然后导入位使其工作,您需要转到其他工作表上的代码并将其从私有更改为公共。

到目前为止,还没有出现任何错误。

于 2015-10-01T16:53:27.480 回答
-1

没有通过代码执行此操作的干净方法,因为按钮的单击事件通常是其他工作簿的私有方法。

但是,您可以通过打开工作簿,找到所需的控件,然后激活它并向其发送空格字符(相当于按下按钮)来自动单击 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
于 2008-09-24T22:53:45.307 回答