プロシージャのスコープ(適用範囲)

プロシージャのスコープとはそのプロシージャが有効な範囲のことで、このスコープ内でのみプロシージャの呼び出しが可能になります。

標準モジュールに記述されたプロシージャはそのスコープに応じて以下の2つに分類できます。

  • Private プロシージャ
    ⇒ 同一モジュール内でのみ呼び出しが可能
  • Public プロシージャ
    ⇒ 同一プロジェクト内のすべてのプロシージャから呼び出しが可能
スポンサーリンク

Private プロシージャ

プロシージャ名の前にキーワード Private を指定すると Private プロシージャとなります。プロシージャ分割した場合など、汎用的に使えないプロシージャや呼び出し元を限定したいプロシージャはPrivateにします。

構文
Private Sub [プロシージャ名]( [引数], … )
   :
End Sub
構文
Private Function [プロシージャ名]( [引数], … )
   :
End Sub
Private プロシージャの呼び出し可能範囲
Private プロシージャの呼び出し可能範囲
  • 同一モジュール内PrivateプロシージャAからプロシージャ1を呼び出す
    ⇒ 〇 可能
  • 同一モジュール内PublicプロシージャBからプロシージャ1を呼び出す
    ⇒ 〇 可能
  • 別モジュールPrivateプロシージャCからプロシージャ1を呼び出す
    ⇒ × 不可能
  • 別モジュールPublicプロシージャDからプロシージャ1を呼び出す
    ⇒ × 不可能

Public プロシージャ

プロシージャ名の前にキーワード Public を指定すると Public プロシージャとなります。プロシージャの既定はPublicなので、何も指定しなければPublicとなります。汎用的に使用可能でさまざまなプロシージャから呼び出されるプロシージャは Public にします。

構文
Public Sub [プロシージャ名]( [引数], … )
   :
End Sub
構文
Public Function [プロシージャ名]( [引数], … )
   :
End Sub
Publicプロシージャの呼び出し可能範囲
Publicプロシージャの呼び出し可能範囲
  • 同一モジュール内PrivateプロシージャAからプロシージャ2を呼び出す
    ⇒ 〇 可能
  • 同一モジュール内PublicプロシージャBからプロシージャ2を呼び出す
    ⇒ 〇 可能
  • 別モジュールPrivateプロシージャCからプロシージャ2を呼び出す
    ⇒ 〇 可能
  • 別モジュールPublicプロシージャDからプロシージャ2を呼び出す
    ⇒ 〇 可能

標準モジュールに記述されたパブリックなSubプロシージャ(但し、引数がないものに限る)は、マクロダイアログ( Alt + F8 )に表示され、選択して実行することが可能です。

マクロダイアログ
マクロダイアログ

オブジェクトモジュール内のプロシージャ

オブジェクトモジュール(シートやブック、ユーザーフォームなど)の中に記述したプロシージャや変数はすべてPrivate 扱いになります。他のオブジェクトや標準モジュールからは呼び出せませんので、注意してください。

タイトルとURLをコピーしました