VBA PR

変数が有効な範囲について -初めてのAccessでVBA-

記事内に商品プロモーションを含む場合があります

変数は有効な範囲があります。有効範囲は変数の宣言時に指定可能で3種類あります。

変数の適応範囲3種類
  • プロシージャレベル(プロシージャの中だけで有効)
  • プライベートレベル(モジュールの範囲でのみ有効)
  • パブリックレベル(全てのデータベースモジュール範囲で有効)

プロシージャレベルの変数

プロシージャレベルの変数は下の「Sub test() ~ End Sub」のプロシージャの中だけで有効です。ここでしか使わないし・・・。的な変数はプロシージャレベルにしておきましょう。

Sub test()

	Dim i As Integer
	i = 1
	Msgbox i

End Sub

変数の宣言は「Dim i As Integer」の部分で、この場合は「Sub test() ~ End Sub」の中で宣言されているので、プロシージャレベルの変数となります。

プライベートレベルの変数

こちらはプロシージャレベルの一つ上、モジュールレベルの範囲で有効になります。

Private i As Integer
Dim j As Integer  '←「Private」を省略した書き方'

Sub test1()
   Call test2
   Call test3
  MsgBox i    'i = 11 になる'
End Sub

Sub test2()
   i = 1
End Sub

Sub test3()
   i = i + 10
End Sub

変数の宣言は「Private」を付けて「Sub test*() ~ End Sub」の外で宣言します。「Private」を省略して書いてもプロシージャの外であればプライベート変数として動作します。

ただしプロシージャの中に書いた場合はたとえ「Private」を付けてもプライベートレベルの変数として機能しません。「Dim i As Integer」で書いた場合は通常のプロシージャレベルの変数として機能します。

パブリックレベルの変数

パブリックレベルの変数はデータベースに使われているモジュール全てで有効になります。

モジュール1

Public i As Variant 'パブリックレベルでの宣言'

Sub test1()
    i = "a"
    Call test2
    Call test3

    MsgBox i    ' iは「abc」となる'
End Sub

Sub test2()
    i = i + "b"
End Sub

モジュール2

Public Sub test3()
    i = i + "c"
End Sub

モジュール1の1行目のように「Public」を付けてプロシージャの外側で変数を宣言します。モジュール2には宣言がありませんが、この場合の変数「i」を扱えています。

ちなみにモジュール2のプロシージャに付いている「Public」はモジュール1からtest3のプロシージャを参照できるようにするためです。

created by Rinker
¥2,251 (2024/11/21 00:58:39時点 Amazon調べ-詳細)

プログラミング集中的に学びたい方向け

プログラミング自分のタイミングで学びたい方向け

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA