Access InputBox関数。明細番号の初期値を設定する。
こちらは、売上入力用のサンプルフォームですが、「明細番号」テキストボックスには、明細番号の最大値を取得することで、自動的に次のレコードの明細番号を連番で採れるように、明細番号の最大値を取得して自動採番する。のページでコードを書いています。今回は、レコードがまったく無い状態の時(初めて入力をするときや、レコードを全て削除した後、再び入力をするときなど)に、最初の明細番号を入力することを促すために、InputBox関数を使っていきます。
InputBox関数
InputBox関数を使うと、メッセージと、入力用のテキストボックスのあるダイアログボックスを表示させることができます。「OK」をクリックするか、「Enter」キーを押すと、テキストボックスの内容を、文字列型(String)の値で返します。「キャンセル」をクリックしたときは、長さ0の文字列(“”)を返します。
<構文> |
InputBox(メッセージ[,タイトル][,既定の文字列][,水平ポジション] |
[,垂直ポジション][,ヘルプファイル][,コンテキスト番号]) |
<構文(英語表記)> |
InputBox ( prompt [, title ] [, default ] [, xpos ] |
[, ypos ] [, helpfile ] [, context ] ) |
この引数の英語表記に慣れておくと、VBE(Visual Basic Editor)で出てくる、自動クイックヒントもうまく利用できるようになるので、とても便利です。InputBox関数は、全部で7つの引数があり、そのうち、必須項目は、第1引数の「prompt/メッセージ」1つです。あとの6つは、省略が可能です。
引数 | 内容 |
---|---|
prompt/メッセージ(必須) | ダイアログ ボックス内にメッセージとして表示する文字列式を指定します。引数 prompt に指定できる最大文字数は、約 1,024 文字です。ただし、使用する文字の文字幅に依存します。 |
title/タイトル(省略可能) | ダイアログ ボックスのタイトル バーに表示する文字列式を指定します。省略すると、タイトル バーにはアプリケーション名が表示されます。 |
default/既定の文字列(省略可能) | ユーザーが何も入力しない場合に、テキスト ボックスに既定値として表示する文字列式を指定します。省略すると、テキスト ボックスには何も表示されません。 |
xpos/水平ポジション(省略可能) | 画面の左端からダイアログ ボックスの左端までの水平方向の距離を、twip 単位で示す数式を指定します。省略すると、ダイアログ ボックスは水平方向に対して画面の中央の位置に配置されます。 |
ypos/垂直ポジション(省略可能) | 画面の上端からダイアログ ボックスの上端までの垂直方向の距離を、twip 単位で示す数式を指定します。省略すると、ダイアログ ボックスは垂直方向に対して画面の上端から約 1/3 の位置に配置されます。 |
helpfile/ヘルプファイル(省略可能) | ダイアログ ボックスに状況依存のヘルプを設定するために、使用するヘルプ ファイルを識別する文字列式を指定します。引数 helpfile を指定した場合は、引数 context も指定する必要があります。 |
context/コンテキスト番号(省略可能) | ヘルプ トピックに割り当てたヘルプ コンテキスト番号を表す数式を指定します。引数 context を指定した場合は、引数 helpfile も指定する必要があります。 |
(Microsoft Accessヘルプセンターより) |
VBAコードの記述
- 売上入力フォームの読み込み時イベントにコードを書きます。
- 明細番号の最大値を取得するテキストボックス「txt明細番号L」がNull値のとき、つまり、レコードが一件も無くて、最大値が取得できないときに、インプットボックスを表示させます。
- インプットボックスのテキストボックスに入力した明細番号を変数「Mei」に入れます。
- 変数「Mei」のデータ型は、文字列型(String)なので、CLng関数で、長整数型に変換して、テキストボックス「txt明細番号」に入れます。
Private Sub Form_Load()
Dim Mei As String
If IsNull(Me.txt明細番号L) Then
Mei = InputBox("明細番号を入力してください。", "明細番号")
Me.txt明細番号 = CLng(Mei)
End If
End Sub
そこで、変数「Mei」の値を、売上入力フォームのテキストボックス「txt明細番号」に入れるのですが、ここでは、「明細番号」フィールドのデータ型は、数値型に設定していますので、もし、数値以外の文字列が入力されたときや、インプットボックスのキャンルボタンが押されたときなどは、データ型が一致せず、エラーとなります。
ですので、それを回避するために、コードを追加していきます。
-
- IsNumeric関数を使って、変数Meiが、数値として認識できるとき(Trueのとき)は、変数Meiを長整数型に変換して、「txt明細番号」に入れます。
- 変数Meiが数値として認識されないとき、再びInputBox関数で「明細番号を数値で入力」するよう、再度促します。
- Len関数で、変数Meiの長さを調べ、長さが0以上(つまり、何らかの値が入力されている)間は、Do While~Loopステートメントで、繰り返し処理をするようにします。
- ここでは、変数Meiが、数値と認識されたときは、「txt明細番号」に値を入れ、Exit Doで、Do While Loopから抜けるようにします。ここで、Exit Doで、Loopから抜けないと、Loop処理を止めることができなくなるので、必ず、Exit Doを記入します。
- 変数Meiが数値と認識できない間は、繰り返し、ダイアログを表示させます。
- 変数Meiの長さが「0」のとき(値が何も入力されなかったとき)は、売上入力フォームは閉じるようにします。
Private Sub Form_Load()
Dim Mei As String
If IsNull(Me.txt明細番号L) Then
Mei = InputBox("明細番号を入力してください。", "明細番号")
Do While Len(Mei) > 0
If IsNumeric(Mei) = True Then
Me.txt明細番号 = CLng(Mei)
Exit Do
Else
Mei = InputBox("明細番号を数値で入力してください。", "明細番号")
End If
Loop
If Len(Mei) = 0 Then
DoCmd.Close acForm, "F_売上main"
End If
End If
End Sub
コメントフィード
トラックバックURL : http://gyoumuka.work/wp-trackback.php?p=2646