プロシージャのスコープとはそのプロシージャが有効な範囲のことで、このスコープ内でのみプロシージャの呼び出しが可能になります。
標準モジュールに記述されたプロシージャはそのスコープに応じて以下の2つに分類できます。
- Private プロシージャ
⇒ 同一モジュール内でのみ呼び出しが可能 - Public プロシージャ
⇒ 同一プロジェクト内のすべてのプロシージャから呼び出しが可能
Private プロシージャ
プロシージャ名の前にキーワード Private を指定すると Private プロシージャとなります。プロシージャ分割した場合など、汎用的に使えないプロシージャや呼び出し元を限定したいプロシージャはPrivateにします。
- 同一モジュール内PrivateプロシージャAからプロシージャ1を呼び出す
⇒ 〇 可能 - 同一モジュール内PublicプロシージャBからプロシージャ1を呼び出す
⇒ 〇 可能 - 別モジュールPrivateプロシージャCからプロシージャ1を呼び出す
⇒ × 不可能 - 別モジュールPublicプロシージャDからプロシージャ1を呼び出す
⇒ × 不可能
Public プロシージャ
プロシージャ名の前にキーワード Public を指定すると Public プロシージャとなります。プロシージャの既定はPublicなので、何も指定しなければPublicとなります。汎用的に使用可能でさまざまなプロシージャから呼び出されるプロシージャは Public にします。
- 同一モジュール内PrivateプロシージャAからプロシージャ2を呼び出す
⇒ 〇 可能 - 同一モジュール内PublicプロシージャBからプロシージャ2を呼び出す
⇒ 〇 可能 - 別モジュールPrivateプロシージャCからプロシージャ2を呼び出す
⇒ 〇 可能 - 別モジュールPublicプロシージャDからプロシージャ2を呼び出す
⇒ 〇 可能
オブジェクトモジュール内のプロシージャ
オブジェクトモジュール(シートやブック、ユーザーフォームなど)の中に記述したプロシージャや変数はすべてPrivate 扱いになります。他のオブジェクトや標準モジュールからは呼び出せませんので、注意してください。