HOME > 即効テクニック > Excel VBA > メニューバー・ツールバー関連のテクニック > ツールバーへマクロの登録をした際の注意

即効テクニック

メニューバー・ツールバー関連のテクニック

ツールバーへマクロの登録をした際の注意

(Excel 97)
ツールバーにマクロを登録して使用している場合に、ハードディスク上での運用は問題無く、そのファイルをフロッピーディスクにコピーして使用したものを再度ハードディスクにコピーして、ツールバーに登録したマクロを実行しようとすると、「ファイルが見つかりません」というエラーが出て、マクロを実行することができなくなる、という現象があります。
原因と対策として、次のようなことが考えられます。

○ファイルと一緒にツールバーもフロッピーにコピーできる以上ツールバーをブックに添付してると仮定します。
そこで次のようなことが原因に考えられます。
たとえば

A.xls
B.xls

と2つのブックがあり、それぞれにマクロが書かれています。
ツールバーのボタンに「A.xls」のマクロと「B.xls」のマクロを登録します。そして、そのツールバーを「A.xls」に添付します。
この場合、一見なんでもないようですが、ひとたびそのブックを移動すると、「B.xls」のマクロを登録したボタンを押してもそのマクロは実行できません。
つまり、ツールバーを添付したブックと、ボタンに登録したマクロが書かれているブックが異なるのは厳禁なんです。
なぜなら、ブックが異なると、ボタンには「ブック名+マクロ名」だけでなく「ボタンを登録した時点でのブックの絶対パス+ブック名+マクロ名」が情報として記憶されるため、ひとたびブックを移動すると、その絶対パスの情報が乱れてExcelがマクロの存在場所を見失うのです。
この場合にはこのケースに相当すると考えられます。
もし、相当しているのであれば、ツールバーの添付ブックとマクロの登録ブックが異なるようなマクロの登録の仕方はやめるかもしくは、手作業の登録はやめて
Private Sub Workbook_Open()
の中で、OnActionプロパティを使ってマクロを登録するようにしましょう。

○あるファイル上でのみ使うオリジナルのツールバーでは注意が必要です。
たとえばあるファイルに添付されたツールバーを[aut_open]をつかって
Application.CommandBars("llp施設基本台帳").Visible = True
としているとします。
"llp施設基本台帳"は、このファイルに添付されているツールバーでこのツールバー上に配置されたボタンのマクロもこのファイルに、保存されているとします。
この場合
Application.CommandBars("llp施設基本台帳").Visible = False
ではなくて
Application.CommandBars("llp施設基本台帳").Delete
で、いったん削除してしまいます。
削除したらなくなってしまうと思いがちですが、削除をしておかないと、このファイルを閉じてからツールバーを右クリックしてみますと、表示できるツールバー一覧の中にさきほど閉じられたファイルにのみ添付したはずの"llp施設基本台帳"が残ってしまっているのです。
これだけならばいいのですが、エクセルを終了をさせてしまうとツールバー・ファイル*****8.xlbにこの情報が書きこまれてしまい、次にほかのブックを開いたときにも"llp施設基本台帳"が残ってしまったりするのです。
また最悪なパターンが、ツールバーを添付したブックを名前を変更して保存してしまったりすると、エクセルを終了した時点で、さきほどのようにツールバーが残っていてツールバー・ファイル*****8.xlbに、上書きされてしまったら次に、さきほど名前を付けて保存したファイルの「元ファイル」をひらいて[aut_open]を実行してしまうと開いたブックに添付された"llp施設基本台帳"ではなくツールバー・ファイル*****8.xlbに、保存された"llp施設基本台帳"を表示してしまいます。
つまり、見た目はおんなじボタンでも、マクロのパスが別のところになっているというわけです。