|
▼mimi さん:
こんばんは。
>
>実際に書いたコードは、
>Application.Run "'" & Path & "'!sheet" & idx & ".macro1"
>(PathにはC:\〜\aaa.xmlというフルパスが格納されています)
>と、書きました。
>
>1枚目から順に3枚目までのシートでループを回して処理させました。
>結果としましては、macro1は動作しておりませんでした。
ははっ、標準モジュールにあるのなら動きませんね!!
では、例題仕様です。
まず、標準モジュールにMacro1というプロシジャーが存在しているブックの
名前を callsample.xls としましょう。
Macro1の内容は、
'=========================================================
Sub Macro1()
MsgBox ActiveSheet.Name
End Sub
アクティブシート名を表示するコード
このブックcallsample.xlsには、
Sheet1、Sheet2、Sheet3というシート名が付けられたシートがあります。
この中のSheet2とSheet3には、「フォーム」ツールバーのボタンを配置します。
このボタンには、Macro1が関連付けされています。
次に呼び出しを行うブック、これを「calltest.xls」という名前を付けましょう。
二つのブックは、同じフォルダ内に保存して下さい。
では、calltest.xlsの標準モジュールのコードです。
直接呼び出すのではなくOpenメソッドで対象ブックを開きました。
'===============================================================
Sub main()
Dim opnbk As Workbook
Dim sht As Worksheet
Dim btn As Button
Set opnbk = Workbooks.Open(ThisWorkbook.Path & "\callsample.xls")
'↑対象ブックを開く
For Each sht In opnbk.Worksheets
sht.Activate
For Each btn In sht.Buttons
Application.Run btn.OnAction
Next
Next
End Sub
こんなコードで実行してみて下さい。
ボタンがあるシートだけMacro1が実行されます。
つまり、上の例の場合、ボタンのあるシートのシート名が表示されます。
上記の内容のブックを新規に作成して試してみてください。
>
|
|