LoginSignup
29
49

More than 5 years have passed since last update.

Excel VBAでのクラスモジュール、標準モジュールのスコープまとめ(Friend, PublicNotCreatableなど)

Last updated at Posted at 2015-08-31

まえがき

自ブック(プロジェクト内)でコードを書く分にはあまり意識することはありませんが、下請けクラスやモジュールをぱんぱんに詰め込んだExcel VBAアプリケーションをブックごと「はいどうぞ」と提供するのは、なんとなく、ユーザに変なところまで覗き見られる気持ち悪さがあるものです。

できれば、ユーザには直接利用できるファンクションだけ公開しておいて、その他の処理は隠したい。そういう時、機能ごとにアドイン分割+参照設定などを行います。

いきなりまとめ

下の表は、Private, Publicなどのスコープによって参照可否がどのようにコントロールされるかをまとめたものです。

無題.png

標準モジュール

標準モジュールのPublicメソッドは、クラスからでも他プロジェクトからでも、あらゆるところから無制限に見えます。

クラスモジュール

クラスモジュールの場合、Instancingプロパティによって他プロジェクト(参照元)からの参照可否をコントロールできます。

  • Privateにすると参照元からクラスを利用することはできません。
  • PublicNotCreatableにすると、参照元からクラスを利用することができますが、インスタンスの生成は参照先でやる必要があります。(つまり、参照先にcreateメソッドなんかを作っておいて、生成させたインスタンスを戻り値で受ける必要がある)

クラス変数を直接ユーザーから見える場所に晒したくなければクラスモジュールはPrivateにしてしまい、処理のインタフェースとしてPublicなFunctionを用意しておく、といったやり方がありそうです。特にユーザーがサブクラスを使ってカスタマイズする可能性のあるツールなんかはPublicなFunctionをバチっと整備しておいて、その枠内でやってもらい、クラス変数は隠してしまった方がよさそうです。

29
49
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
49