#まえがき
自ブック(プロジェクト内)でコードを書く分にはあまり意識することはありませんが、下請けクラスやモジュールをぱんぱんに詰め込んだExcel VBAアプリケーションをブックごと「はいどうぞ」と提供するのは、なんとなく、ユーザに変なところまで覗き見られる気持ち悪さがあるものです。
できれば、ユーザには直接利用できるファンクションだけ公開しておいて、その他の処理は隠したい。そういう時、機能ごとにアドイン分割+参照設定などを行います。
#いきなりまとめ
下の表は、Private, Publicなどのスコープによって参照可否がどのようにコントロールされるかをまとめたものです。
##標準モジュール
標準モジュールのPublicメソッドは、クラスからでも他プロジェクトからでも、あらゆるところから無制限に見えます。
##クラスモジュール
クラスモジュールの場合、Instancingプロパティによって他プロジェクト(参照元)からの参照可否をコントロールできます。
- Privateにすると参照元からクラスを利用することはできません。
- PublicNotCreatableにすると、参照元からクラスを利用することができますが、インスタンスの生成は参照先でやる必要があります。(つまり、参照先にcreateメソッドなんかを作っておいて、生成させたインスタンスを戻り値で受ける必要がある)
クラス変数を直接ユーザーから見える場所に晒したくなければクラスモジュールはPrivateにしてしまい、処理のインタフェースとしてPublicなFunctionを用意しておく、といったやり方がありそうです。特にユーザーがサブクラスを使ってカスタマイズする可能性のあるツールなんかはPublicなFunctionをバチっと整備しておいて、その枠内でやってもらい、クラス変数は隠してしまった方がよさそうです。