Microsoft Access Club >VBA物語 >このページ >次頁 < 前項  サイト内検索


変数を記述する位置:VBA物語14



今まで、変数を用いたプロシージャを何気なくご紹介してきました。しかし、一体変数はプロシージャのどの位置に記述すべきでしょうか?皆さん疑問に思われたことはないですか?

プロシージャは、上から順番に実行されることは既にお話ししましたね。そして、誰が見ても、「変数は変数を用いる前に定義付けを行う」ことは明白ですが、実はこの変数の記述位置は大変重要な意味が含まれているんです。下記プロシージャをご覧ください。

このプロシージャは、変数 a の定義をコマンドボタンの「クリック時イベント」プロシージャの外側に記述しています。 このプロシージャを実行すると、1回目に下記のようなメッセージが表示されます。

次に、再度プロシージャを実行すると、下記メッセージに代わります。

 

変数 a の値が一つ増加していますね。a =a + 1 の構文は、元の a に 1 を加算しなさいという意味です。 今までお目にかかったのは、下記のような変数の使い方ですよね。

このプロシージャ内に記述した a は、初期値を設定していないため自動的に 0 となります。よって、プロシージャを複数回実行しても、常に下記メッセージが表示されます。つまり、加算がされていきません。

ここまでお話すればお判りですね。

  • プロシージャの外側に記述した変数は、値を保持しつづけます。

と、表現することができます。

更に、もう少し詳しく云いますと、

「このフォームが開いている状態である限り、フォームのモジュール内(全てのプロシージャ内)で変数の値は保持され続ける。」と表せます。

ここで「モジュール…」という表現を用いたのは、「プロシージャ内だけ」で値を保持させる方法が別にあるからです。

 

フォーム内では、いろんなイベントにプロシージャを定義できます。そして、下記プロシージャをまとめて「フォーム内のモジュール」といいます。

  1. フォームを開いた時
  2. フォームを閉じた時
  3. フォームに配置したコマンドボタンのクリック時
  4. 他…

では、話を元に戻し、先ほどの別の方法についてお話します。下記プロシージャをご覧ください。

このプロシージャを実行すると、変数 c の値が増加していきます。Dim の代わりに Static ステートメントを用いているのが判りますか?

この Staticステートメント は、その宣言されているプロシージャ内(ここでは、Private Sub cmd_コマンドボタン_Click()以下…)内で、オブジェクト(ここではフォーム)が開いている限り、値を保持し続けます。

ここまでで、チョットまとめてみましょうか。

  1. プロシージャの外側にDimステートメント で変数を宣言した時は、このプロシージャを含むモジュールがアクティブである限り、値を保持し続けます。 そして、この変数は、このプロシージャを含むモジュール内の他のプロシージャで、 定義付けなしに自由に用いることができます。
  2. プロシージャ内で Staticステートメント で変数を宣言した時は、このプロシージャを含むモジュールがアクティブである限り、 このプロシージャ内で値を保持しつづけます。
  3. プロシージャ内で Dim ステートメント で変数を宣言した時は、 このプロシージャを含むモジュールがアクティブである限り、 このプロシージャ内で値を保持することができません。
  4. パブリックプロシージャで、Dimステートメントを用いてプロシージャの外側に変数を宣言した時は、 データベースが開いている限り、値を保持させることができます。 そして、データベース全てのプロシージャで、定義付けなしにこの変数を用いることができます。 ※但し、Staticステートメントを用いることはできません。

以上に分類できます。上記4のパブリックプロシージャについては、未だお話していませんので、さらっと流して下さいね。値を保持したい場面にはよく直面しますから、そのときはこれを思い出して下さいね。

関連ページ

2001/10/25

ページの先頭へ 前ページへ戻る


変数を記述する位置:VBA物語14


 

-Microsoft Access Club-