【VBA】マクロを実行でSubプロシージャを表示しない(Option Private Module)
マクロを実行マクロを実行ボタンを押すと、実行可能なSubプロシージャが一覧表示されます。
ただ、人に渡すマクロでは見せたくないSubプロシージャもありますよね。
Sub これは見せたい() Call これは見せたくない End Sub Sub これは見せたくない() 'サブプロシージャ End Sub例えば、上のように処理をサブプロシージャに分けていると、マクロを実行ボタンを押した時に「これは見せたくない」が表示されてしまいます。
サブプロシージャだけ実行されると危ないですよね
こうした見せたくないプロシージャを非表示にするには2つの方法があります。
今回は、それぞれのメリット・デメリットを比較して紹介します。
1. SubプロシージャにPrivateを付ける
Sub これは見せたい() Call これは見せたくない End Sub Private Sub これは見せたくない() ' サブプロシージャ End Sub1つ目の方法はサブプロシージャの先頭に「Private」を付けることです。
これを付ければ、マクロを実行ボタンを押してもサブプロシージャは表示されます。
デメリットは、他のモジュールからCallできなくなることです。
Private例えば、モジュールを2つ作っていて、モジュール1に「これは見せたくない」サブプロシージャがあったとします。
そして、このサブプロシージャを使い回したいなと思ってモジュール2のマクロからCallしようとしても、Privateを付けていると呼び出すことができません。
これがPrivateを付けるデメリットです。
2. Option Private Moduleを付ける
Option Private Module Sub これは見せたい() ' 別のモジュールへ移す Call これは見せたくない End Sub Sub これは見せたくない() ' サブプロシージャ End Subもう1つの方法は「Option Private Module」を付ける方法です。(これはモジュールの先頭に書く必要があります)
これを書くとモジュール内のすべてのプロシージャが、マクロを実行ボタンを押しても表示されません。
そのため、上のプログラムを1つのモジュールに入れていると、実行したいプロシージャ「これは見せたい」も表示されなくなります。
これを使う時は、実行したいプロシージャを別のモジュールにしておく必要があります。(Privateと違って、別のモジュールからもCallできます)
複数のモジュールを使ってプロシージャを分けたい場合に便利な機能です。
メリット・デメリットと使い分け
メリットデメリットPrivate対象のSubプロシージャだけ表示されない他のモジュールからCall×Option Private Module他のモジュールからCall〇モジュール全体が表示されないメリット・デメリットメリット・デメリットをまとめると上の表のようになります。そして、ここから使い分けを考えると次の表のようになります。
モジュールが1つモジュールが複数Private〇×Option Private Module×〇使い分け方基本的にモジュールが1つであればPrivateを付ける。モジュールが複数であれば「Option Private Module」を付けるという風に覚えておけばOKです。