【问题标题】:Selection.OnAction = "Workbookname!Macroname"Selection.OnAction = "工作簿名!宏名"
【发布时间】:2013-09-08 16:22:05
【问题描述】:

假设您有两个工作簿,一个名为“MyWorkbook”,另一个名为“PatchMyWorkbook”。两个工作簿都在保存时打开。 “PatchMyWorkbook”有一个宏来添加一个按钮并将“MyWorkbook”的现有宏分配给“MyWorkbook” “MyWorkbook”中的现有宏称为“PrintPage”

Windows(“MyWorkbook”).Activate  
Sheets("Sheet1").Activate
ActiveSheet.Buttons.Add(665.25, 43.5, 89.25, 45).Select
Selection.OnAction = "PrintPage"

这不会在“PatchMyWorkbook”代码执行时导致错误,但新添加的按钮宏将指向“'PatchMyWorkbook'!PrintPage”,而不仅仅是“MyWorkbook”的“PrintPage”

问题:如何为跨工作簿的宏按钮设置“OnAction”,以便宏指向当前工作簿而不是创建宏的工作簿?

【问题讨论】:

  • 我试过 MyWbk.Sheets("Sheet1").Shapes("ButtonName").OnAction = "'" & myWbk.Name & "'" & "!" &“PrintPage”,但它不起作用。它仍然引用运行宏的工作簿。

标签: vba excel


【解决方案1】:

我认为.OnAction property应该这样设置:

Selection.OnAction = myWbk.Name & "!PrintPage"

顺便说一句,您评论中的想法(在下面有所更改):

Selection.OnAction = "'" & myWbk.Name & "'" & "!" & "PrintPage"

也适用于我(Excel 2010)。

【讨论】:

    【解决方案2】:

    您需要包含定义PrintPage 的工作表或模块的名称。

    Dim methodName As String
    With <module or sheet where 'PrintPage' is defined>
        methodName = "'" & MyWbk.Name & "'!" & .CodeName & ".PrintPage"
    End With
    MyWbk.Sheets("Sheet1").Shapes("ButtonName").OnAction = methodName
    

    MyWbk.Name 周围的单引号很重要。

    【讨论】:

      【解决方案3】:

      快速简便的方法是:

      workbooks("name_of_workbook").Worksheets("name_of_sheet").Shapes("name_of_button").OnAction = "name_of_your_macro"
      

      只需将不同的“name_of_...”替换为您的姓名即可。

      有效吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-25
        • 1970-01-01
        • 2021-08-28
        • 2017-06-20
        • 1970-01-01
        • 1970-01-01
        • 2019-11-19
        • 1970-01-01
        相关资源
        最近更新 更多