ユーザーにツールバーの「マクロ」から直接起動されては都合が悪い場合があると思います。
マクロで作成した仕組みを実装させたワークブックを複数の利用者に配布する場合、マクロが誤動作しないように配慮する必要があることは説明するまでもないと思います。

本来、マクロの起動はツールバーの「マクロ」を選択して起動します。

「作ったVBA(マクロ)の起動方法は?」で説明していますが、ボタンやツールバーを用意して起動できるようにしていれば、多くの場合は問題なく処理されると思いますが、ツールバーの「マクロ」からプロシージャが自由に実行できてしまう状態の場合は、本来、起動できないはずの状態(違うシートがアクティブになっている状態など)で操作されてしまい不慮の結果が生まれてしまうことがあります。
では、この「マクロ」のウィンドウにプロシージャ名を表示させない方法はあるのでしょうか?
実は、配布の問題にある「アドイン動作のサンプル」でも一部の方法を説明していますが、以下のような方法で、誤操作への対応ができます。
但し、方法を誤ると、本来用意した起動手段からも起動できなくなるので注意して下さい。
- マクロを書き込んだのが標準モジュールで、単純にツールバーの「マクロ」に表示させないのであれば、
これをモジュールの先頭に書いてやれば、このモジュールにあるプロシージャは一切表示されなくなります。
これは、「メイン」のプロシージャと、共通部品などの「サブ」のプロシージャを作る場合、その「サブ」のプロシージャをツールバーの「マクロ」から直接起動されてしまうのを避ける場合に利用できます。
但し、シートに貼り付けたフォームのボタンから起動する場合の、マクロの選択にも表示されなくなるので、「メイン」のプロシージャに使うことはできません。同じプロジェクト内であれば呼び元のプロシージャが他のモジュールのあっても呼び出すことができます。
- 同一の標準モジュールに「メイン」のプロシージャと、共通部品などの「サブ」のプロシージャを混在で収容する場合は、「サブ」のプロシージャに、
Private Sub Sub_Proc()
・
・
End Sub
このように「Private」を付けて書いておけばツールバーの「マクロ」から直接起動されてしまうのを避けることができます。
但し、プロシージャに「Private」を付けた場合は、同じモジュール内からの呼び出しだけを許可するようになるので、「Option Private Module」とは意味が違います。
- また、引数があるプロシージャについても、
Sub Sub_Proc2(strHIKISU As String)
・
・
End Sub
同様にツールバーの「マクロ」に表示されません。
本来、引数が不要なプロシージャでは、
Sub Sub_Proc3(Optional strHIKISU As String = "")
・
・
End Sub
というように「Optional」を付けておくと、呼び出し側のプロシージャは引数の記述が任意になるので、何も変更しなくて済みます。
また、戻り値を何も返さない「Functionプロシージャ」にしてしまうのも「手」かも知れません。
本来は、引数をつけたり、つけなかったりを自由にさせるためのものですが、これをマクロを直接起動をさせないために利用するわけです。ただし、注意点として、この引数を初期値を明示しないでVariant型にしたり、あるいはデータ型を明示しない場合はプロシージャ名が「マクロ」に表示されてしまいます。
なお、「マクロ」に表示させないことのために引数を付加するのは本来の引数のあり方ではありません。
このようなことならモジュールの先頭に「Option Private Module」を書けば済むことです。
- ワークシート側からシートに貼り付けたボタンやカスタムツールバーを使って起動させる場合、その起動プロシージャ名をツールバーの「マクロ」に表示させないとなると、やや難しいことになります。
カスタムツールバーで、そのカスタムツールバー自身を「アドイン動作のサンプル」のようにマクロ側から作り上げていれば「Private」なプロシージャをOnActionプロパティで指定できます。
シートにボタンなどを貼り付けて起動させる場合は、何種類かの方法があります。
まず、起動ボタンが「コントロールツールボックス」のボタンの場合は、元々シートモジュールに起動プロシージャを記述する必要がありますから、その起動プロシージャで必要な引数などを記述すれば済みます。
Private Sub CommandButton1_Click()
Call TEST1
End Sub
この時の呼び出されるプロシージャが「Option Private Module」の記述があるモジュールにあっても問題ありません。
ワークブックやシートのイベントから呼び出す場合も同様です。
- シート上にボタンを貼り付ける場合、「コントロールツールボックス」ではなく、「フォーム」のボタンを使う場合が多いと思います。これはマクロ側から動的に追加するような場合でもイベント記述が要らないことや、ブラウザ上でも動作に問題が起きないなどの理由があるからです。
ですが、「フォーム」のボタンの「マクロの登録」に表示されるプロシージャはツールバーの「マクロ」に表示されるものと同じです。「Option Private Module」の記述があるモジュールのプロシージャは表示されません。
ですが、この場合は、一旦、「Option Private Module」をコメントにしておいて、「フォーム」のボタンの「マクロの登録」に表示されるようにしてプロシージャを選択して登録してしまっておきます。
この後で、「Option Private Module」を有効にすれば以降はツールバーの「マクロ」には表示されませんが、先にマクロを登録してしまった「フォーム」のボタンからは問題なく動作します。