Accessのフォームに、テキストボックスを配置する方法が一般的ですが、今回はプログラムの中から簡単に利用できる、インプットボックス(InputBox関数)を使ってみることにしましょう。インプットボックスなら、フォームを変更することなく利用できます。
前回コピーして作成した、フォーム「F101Test」を使います。
【1】Accessのファイル「SampleDB020.mdb」を起動します。
【2】フォーム「F101Test」を選択し、ツールバーの「コード」をクリックします。
*このようなVBEの表示の仕方も覚えておくと便利です。
【3】VBEが起動しました。フォーム「F101Test」のモジュールが操作の対象となっていることを、必ず確認してください。
*コピーしたものなので、イベントプロシージャが既に書かれています。
【4】コマンドボタンをクリック時のイベントプロシージャを、以下のように修正します。
Private Sub cmdAdd_Click()
Dim cdValue As Integer
Dim nameValue As String
cdValue = CInt(InputBox("PREF_CD を入力してください。", "PREF_CD"))
nameValue = InputBox("PREF_NAME を入力してください。", "PREF_NAME")
Call test8.addData(cdValue, nameValue)
MsgBox "追加完了"
End Sub
【5】ここまでの作業を「保存」してください。
変更点はたったこれだけです。既にインプットボックスから値を入力できるようになっています。
【解説】
(1)変数を宣言している部分です。
Dim cdValue As Integer 整数型
Dim nameValue As String 文字列型
変数名は何でもかまいません。プロシージャ内で宣言した変数は、そのプロシージャ内だけが有効範囲なので、他のプロシージャに同名の変数があっても区別されます。
*変数の有効範囲をスコープと言います。
今回は標準モジュール側と明確に区別するため、わざと別名を付けていますが、同じ名前でも大丈夫です。
(2)InputBox 関数を使い、PREF_CDの値を取得している部分です。
cdValue = CInt(InputBox("PREF_CD を入力してください。", "PREF_CD"))
InputBox 関数の最初の引数は、表示するメッセージで、2番目の引数はタイトルです。文字列なら何でもかまいません。
ポイントは InputBox 関数は、『文字列型の値を返す』ということです。そのままでは整数型の変数に代入することができません。そこでデータ型変換関数の CInt() を使い、文字列を整数型に変換してから代入しています。
(3)PREF_NAMEの値は、もともと文字列型なので、そのまま代入できます。
nameValue = InputBox("PREF_NAME を入力してください。", "PREF_NAME")
(4)あとは変数を引数に指定して、標準モジュールの Subプロシージャ を呼び出すだけです。
Call test8.addData(cdValue, nameValue)
この時、引数のデータ型に注意してください。標準モジュールの Subプロシージャ 側は以下のように定義しましたね。
test8.addData
Sub addData(pCd As Integer, pName As String)
省略
End Sub
つまり呼び出す側の引数の「データ型、順番、数」を、呼び出される側と一致させる必要があるのです。
そのため変数 cdValue は整数型に、nameValueは文字列型にしています。
【ワンポイント】
InputBox 関数には、引数が多くありますが、そのほとんどが省略可能となっています。
InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])
引数を指定することで、規定値を設定したり、InputBoxの表示位置などが調整できます。
もっと詳しく知りたい場合は、 Microsoft Visual Basic のヘルプをご覧ください。