フォーム間で変数を渡す方法(ACCESS編)
ACCESSで「フォーム間で変数」での問い合わせがありましたので、ひとつ紹介致します。
いくつかの方法があるのですが、そのひとつである「パブリック変数」を使う方法を示します。
MDBの中で共通にして使える変数を定義し、それに値を入れてやれば、どのフォームでも共通して使うことが出来ます。
例を追って説明していきます。
----------------------------------------------------------
1.フォーム間で使う変数の定義
では、MDBの中で共通にして使える変数はどうやって定義するのといえば、モジュールの中で定義すればいいだけです。
次はモジュールでの例。
Public pstrTamTam As String
モジュール新規作成を選び、上の文を記述して、適当な名前で保存します。
(Module1でも何でもいい。)
ちなみに、フォームの中で定義してもそのフォームでは共用して使えますが、MDBの中では共用できません。
----------------------------------------------------------
2.フォーム1で変数へ値を与える
'フォームが開く時
Private Sub Form_Open(Cancel As Integer)
pstrTamTam = "" 'とりあえず変数に空文字を入れる
txtTamTam.Value = pstrTamTam 'テキストボックスへ空文字を入れる
End Sub
変数の特徴としてNull文字が入ることはありえません。
しかし、フォームのに貼り付けたツールのテキストボックスとかコンボボックスには、フォームが開いた直後は何も入っていない状態なので、基本Null文字が入っています。
だから、フォームが開く時に、テキストボックスへ空文字を無理やり入れてしまいます。
Null文字は目では見えませんが一種の空白文字です。
----------------------------------------------------------
3.フォーム1のテキストボックスへ文字を入力
何か好きな文字をキーボードから入れます。
----------------------------------------------------------
4.フォーム1でフォーム2を開く
テキストボックスの値を変数へ格納してから、フォーム2を開きます。
'フォーム2が開くボタンをクリック
Private Sub cmdOpenForm2_Click()
pstrTamTam = txtTamTam.Value 'テキストボックスの値を変数へ格納
DoCmd.OpenForm "frmForm2" 'フォーム2を開く
End Sub
----------------------------------------------------------
5.フォーム2が開く時
格納してある変数をフォーム2のラベルへ転送し表示します。
'フォーム2が開く時
Private Sub Form_Open(Cancel As Integer)
lblTamTam.Caption = pstrTamTam
End Sub
----------------------------------------------------------

----------------------------------------------------------
しかし、「パブリック変数」を使うといっても、実際めんどうくさいですよね。
でもこの方法がテストの容易さから、結構利用しています。
フォーム2からフォーム1のテキストボックスを参照するという手もあるのですが、絶対条件としてフォーム1が開いていないといけません。
開いていない場合はエラーが起きるのでエラー処理すればいいのですが、上記での方法ですと、フォーム2を単独で開いても変数に値があればそのままテストすることができます。
使われる状況により、いろいろな方法を選んで使う、というのが現実としての考え方です。
ACCESSで「フォーム間で変数」での問い合わせがありましたので、ひとつ紹介致します。
いくつかの方法があるのですが、そのひとつである「パブリック変数」を使う方法を示します。
MDBの中で共通にして使える変数を定義し、それに値を入れてやれば、どのフォームでも共通して使うことが出来ます。
例を追って説明していきます。
----------------------------------------------------------
1.フォーム間で使う変数の定義
では、MDBの中で共通にして使える変数はどうやって定義するのといえば、モジュールの中で定義すればいいだけです。
次はモジュールでの例。
Public pstrTamTam As String
モジュール新規作成を選び、上の文を記述して、適当な名前で保存します。
(Module1でも何でもいい。)
ちなみに、フォームの中で定義してもそのフォームでは共用して使えますが、MDBの中では共用できません。
----------------------------------------------------------
2.フォーム1で変数へ値を与える
'フォームが開く時
Private Sub Form_Open(Cancel As Integer)
pstrTamTam = "" 'とりあえず変数に空文字を入れる
txtTamTam.Value = pstrTamTam 'テキストボックスへ空文字を入れる
End Sub
変数の特徴としてNull文字が入ることはありえません。
しかし、フォームのに貼り付けたツールのテキストボックスとかコンボボックスには、フォームが開いた直後は何も入っていない状態なので、基本Null文字が入っています。
だから、フォームが開く時に、テキストボックスへ空文字を無理やり入れてしまいます。
Null文字は目では見えませんが一種の空白文字です。
----------------------------------------------------------
3.フォーム1のテキストボックスへ文字を入力
何か好きな文字をキーボードから入れます。
----------------------------------------------------------
4.フォーム1でフォーム2を開く
テキストボックスの値を変数へ格納してから、フォーム2を開きます。
'フォーム2が開くボタンをクリック
Private Sub cmdOpenForm2_Click()
pstrTamTam = txtTamTam.Value 'テキストボックスの値を変数へ格納
DoCmd.OpenForm "frmForm2" 'フォーム2を開く
End Sub
----------------------------------------------------------
5.フォーム2が開く時
格納してある変数をフォーム2のラベルへ転送し表示します。
'フォーム2が開く時
Private Sub Form_Open(Cancel As Integer)
lblTamTam.Caption = pstrTamTam
End Sub
----------------------------------------------------------
----------------------------------------------------------
しかし、「パブリック変数」を使うといっても、実際めんどうくさいですよね。
でもこの方法がテストの容易さから、結構利用しています。
フォーム2からフォーム1のテキストボックスを参照するという手もあるのですが、絶対条件としてフォーム1が開いていないといけません。
開いていない場合はエラーが起きるのでエラー処理すればいいのですが、上記での方法ですと、フォーム2を単独で開いても変数に値があればそのままテストすることができます。
使われる状況により、いろいろな方法を選んで使う、というのが現実としての考え方です。