3

「MyWorkbook」と「PatchMyWorkbook」という 2 つのワークブックがあるとします。両方のワークブックが保存時に開いています。「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」コードの実行中にエラーが発生することはありませんが、新しく追加されたボタン マクロは、「MyWorkbook」の「PrintPage」ではなく「'PatchMyWorkbook'!PrintPage」を指します。</p>

質問: マクロが、マクロが作成されたブックではなく現在のブックを指すように、複数のブックにわたってマクロ ボタンの "OnAction" を設定するにはどうすればよいですか?

4

3 に答える 3

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 に答える
1

私の意見では、次の.OnAction propertyように設定する必要があります。

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

ちなみに、あなたのコメントからのアイデア(以下で少し変更):

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

私のためにも働いています(Excel 2010)。

于 2013-09-08T20:44:14.970 に答える
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 に答える