3

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

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”</p>

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

4

3 回答 3

1

在我看来.OnAction property应该这样设置:

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

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

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

也为我工作(Excel 2010)。

于 2013-09-08T20:44:14.970 回答
1

您需要包含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很重要。

于 2014-02-26T01:42:59.167 回答
0

一种快速简便的方法是:

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

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

它有效吗?

于 2014-03-31T19:24:19.077 回答