vba マクロから別のマクロを開くやり方です♪

こんばんは~cacaponです♪
最近、仕事でVBAを行うことになったのですが、
久々に扱ったのでだいぶ忘れていました~

 

 今日は、そんなVBAに関する備忘録として、
マクロから別のマクロを実行する方法をまとめていきたいと思います~

 

これをやる経緯は?

今回仕事で作っているマクロが数がいっぱいでありまして~
マクロ毎に似通った処理も多くありました~

それだったら、

・処理を行うマクロ

・処理を呼び出すマクロ

 

という感じで別々にすれば、管理しやすくなるかな?
と思ったのです~ 

何個かやり方があるのでまとめていきますね~


① 同じモジュールの中にある場合

同じモジュールの中にあるときは簡単です♪

Call <マクロ名>

呼び出すことができます♪

 

test というマクロを作っているのでしたら、

Call test

で呼び出せますよ~

 

② 同じファイルにあるが違うモジュールの場合

この場合も、まだ簡単です~

Call <モジュール名>.<macro名>

で呼び出せます~

 

hogeモジュールのtest2マクロを呼び出したいのだったら、

Call hoge.test2

ですね~

 

③ 違うファイルのマクロを呼び出す場合

今回これを多用したのですが、
これがちょっとめんどくさかったです~

この場合はCallではなくApprication.Run を使います~

Application.Run " '<マクロのパス>'!<マクロ名>"

という感じです~

ファイルパスは絶対パスになります~

なので、C:\dir\macro.xlsm にあるtest3マクロを
別のマクロを呼び出したい場合は、

Application.Run " 'C:\dir\macro'!test3

という感じですね♪拡張子はつけないのでご注意を~

因みに、何がめんどくさいかというと、
パスの設定ですね~

cacaponの作ったものは、一つ上の階層に処理を行うマクロを置いたので、
MACRO_PATH = Left(ThisWorkBook.Path, InStrRev(.Path, "\") - 1) & "\処理マクロ"

みたいな感じで、設定してました~

ややこしやです~

注意点

自分で行う場合は、これで大丈夫なんですけど、
他の人にマクロを渡した場合は、
「むむ、怪しいマクロめ!」と無効にされちゃうらしいです~

その為には、デジタル署名をしたり、証明書?を発行したり
必要みたいなのですが、まだ調べ中なので
調べ終わったらこちらのブログに記載したいと思います~

 

終わりに

今日は、マクロからマクロを開くやり方でした~
これで、処理を共有することで、
修正箇所を減らしたりとかもできて便利になりました♪

パッケージ化みたいな感じですかね?

暫くVBAは使いそうなので、もっとできるようになりたいです~