【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 Sub
1つ目の方法はサブプロシージャの先頭に「Private」を付けることです。
これを付ければ、マクロを実行ボタンを押してもサブプロシージャは表示されます。
デメリットは、他のモジュールからCallできなくなることです。
例えば、モジュールを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です。