プロが教えるわが家の防犯対策術!

エクセルにおいてマクロを組んでいます.

1.実行させたいマクロAが組んであるファイル(Aファイルとします)が多数あります。またマクロAはモジュール内(Module1)に作っております。
2.1のマクロAを別のエクセルファイル(Bファイルとします)のマクロBで実行させたい.

上記のようなことを行いたいのですが可能でしょうか?さらに言えば、マクロBによってマクロAのプロシージャを指定して実行させることは出来るでしょうか?
現在は、マクロBによってマクロAを組んであるAファイルを開き、Aファイルのマクロの中にファイルを開いたときにマクロAを実行させる(イベントドリブン)ようにしています.
直接、マクロBでAファイルのマクロAを動かせるようになればマクロAにイベントドリブンなコードを組む手間がなくなるので、なんとかそのような事が出来ないでしょうか?

どうか、詳しい方ご教授ください。
よろしくお願いいたします。。。

A 回答 (4件)

マクロの保存先をPERSONAL.XLSにすればどうですか

この回答への補足

回答ありがとうございます.

ご指摘のとおり、マクロAをPERSONAL.XLSのモジュールに置き、マクロBの中でマクロAを呼んで(Call)見ましたが、
「sub または関数が定義されていません」
となってしまいました。つまり、マクロBからPERSONAL.XLS内のマクロAは見えないようです.
ちなみに手動でPERSONAL.XLSに置いたマクロAを動かすことは出来ましたが・・・

補足日時:2010/01/30 13:17
    • good
    • 0

マクロBから、別ブック.xls の MacroA を実行したい場合は


マクロBに、次のコードを。。。

Application.Run "別ブック.xls!MacroA"


それから、
>マクロBによってマクロAのプロシージャを指定して実行させることは?

これ意味不明です。
マクロAのプロシージャとはなんでしょうか。
マクロAがプロシージャそのものだと思いますが。。。

そこら辺りはも少し詳しく補足する必要があるでしょう。
 

この回答への補足

回答ありがとうございます。

>Application.Run "別ブック.xls!MacroA"
早速、試してみます。

>マクロAのプロシージャとはなんでしょうか。
>マクロAがプロシージャそのものだと思いますが。。。

実は、マクロAは複数のサブプロシージャがあり、メインプロシージャ(メインルーチン)から必要に応じてサブプロシージャ(サブルーチン)を呼び出す(Call)構造をしています。
つまり、やりたいことはマクロBからマクロA内のサブプロシージャ(サブルーチン)を動作させたかったという意味でした。
申し訳ありませんでした。。。

補足日時:2010/01/30 15:31
    • good
    • 1

ファイルAのマクロをコピーしてファイルBのマクロに貼り付ければよいです。

    • good
    • 3

回答2、myRangeです。


 
>実は、マクロAは複数のサブプロシージャがあり、メインプロシージャ(メインルーチン)から必要に応じてサブプロシージャ(サブルーチン)を呼び出す(Call)構造をしています。
>つまり、やりたいことはマクロBからマクロA内のサブプロシージャ(サブルーチン)を動作させたかったという意味でした。

質問者はちょっと勘違いしているようですね。
マクロAもプロシージャであり、Callされるのも同じプロシージャーです。
質問者がメイン、サブと呼んでいるだけで、それらは個々のプロシージャですから

例えば、マクロAからCallしている MacroAAA を実行させたければ
 
Application.Run "別ブック.xls!MacroAAA"

とそれを指定してやるだけです。
 

この回答への補足

myRange様ありがとうございます。

>質問者はちょっと勘違いしているようですね。
>マクロAもプロシージャであり、Callされるのも同じプロシージャーです。

その通りです。私が勝手にメインとかサブとか言っているだけでした。
申し訳ありませんでした。

>Application.Run "別ブック.xls!MacroAAA"

試してみます。

補足日時:2010/01/30 16:58
    • good
    • 2
この回答へのお礼

myRange様ありがとうございます。

ファイルA(マクロAが入っている)のファイル名は、A001,A002,A003・・・となっていて(インクリメントしたいから)マクロBにおいて、

Dim F_Name As String
F_Name="A001.xls"

Application.Run (F_Name & "!MacroAAA")

として無事に動かすことが出来ました。

myRange様 感謝いたします。本当に感謝しても仕切れません。
機会があるときはまたご教授ください。
本当にありがとうございました!!!

お礼日時:2010/01/30 18:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!