日付やパスワードを入力する、専用のInputBoxを作りたい場合があります。そこでここではフォームで改造の基本となるようなInputBoxを作成します。
使用するコントロールはラベル・テキストボックス・OKとキャンセルのコマンドボタンになります。
フォームを開く時に、複数の引数を設定できるようにし、タイトルやテキストボックスの初期値を指定できるようにします。
フォームはダイアログ形式にし、フォームを閉じなければフォーカスが戻らないようにします。
フォームのサイズは、Form_Loadイベント内でコマンドボタンの位置とサイズから計算し設定します。
次に掲載している「フォーム入力時に自動的に半角と全角(日本語)を切り替える」も参照してください。
下のようにフォームデザインで、ラベル・テキストボックス・2つのコマンドボタンのコントロールを配置しました。
コマンドボタンの標題プロパティに、それぞれ「OK」と「キャンセル」を設定しました。
フォームを開くVBAを標準モジュールに作成しました。
これは標準モジュールでなくても、別のフォームからでも同じです。
フォームを開くには、DoCmd.OpenFormを使用し,引数のWindowModeにacDialogを指定することで、ダイアログ形式にしています。
これでInputBoxと同様に、フォームが閉じないとフォーカスは戻りません。
Private Sub MyInputBox()
DoCmd.OpenForm "F_InputBox", , , , , acDialog
End Sub
実行し、開いたフォームです。
レコードセレクタなどは不要なので、ダイアログボックスらしい見た目に修正します。
フォームのプロパティを下記に変更します。
フォームの読み込み時イベントに、フォームのサイズを設定するVBAです。
Private Sub Form_Load()
DoCmd.MoveSize , , Me!コマンド2.Left + Me!コマンド2.Width + 400, _
Me!コマンド2.Top + Me!コマンド2.Height + 800
End Sub
設定したサイズで開いたフォームです。
フォームを開いた時に、任意に渡すことができる引数のOpenArgsは1つだけです。
そこで、コンマ区切りの文字列をOpenArgsに設定し、その後分解するようにします。
・「"入力してください。,MyInputBox,あいうえお"」のように3つの文字列をコンマで区切っています。
1つ目がタイトル文字、2つ目がラベルの標題、3つ目がテキストボックスの初期値になります。
Private Sub MyInputBox()
DoCmd.OpenForm "F_InputBox", , , , , acDialog, "入力してください。,MyInputBox,あいうえお"
End Sub
フォームを開く時の引数 OpenArgsを分解するVBAです。
Private Sub Form_Load()
Dim s1 As Variant
Dim i As Long
DoCmd.MoveSize , , Me!コマンド2.Left + Me!コマンド2.Width + 400, _
Me!コマンド2.Top + Me!コマンド2.Height + 800
s1 = Split(Nz(Me.OpenArgs), ",")
For i = 0 To UBound(s1)
Select Case i
Case 0: Me.Caption = s1(0)
Case 1: Me!ラベル1.Caption = s1(1)
Case 2: Me!テキスト0.Value = s1(2)
End Select
Next
End Sub
複数の引数を設定したフォームです。
フォームの戻り値を取得できるようした標準モジュールのVBAです。
Public lRet As Long
Private Sub MyInputBox()
DoCmd.OpenForm "F_InputBox", , , , , acDialog, "入力してください。,MyInputBox,あいうえお"
MsgBox lRet & " が返りました。"
End Sub
コマンドボタンのクリックで戻り値を設定し、フォームを閉じるVBAです。
Private Sub Form_Load()
Dim s1 As Variant
Dim i As Long
lRet = 0
DoCmd.MoveSize , , Me!コマンド2.Left + Me!コマンド2.Width + 400, _
Me!コマンド2.Top + Me!コマンド2.Height + 800
s1 = Split(Nz(Me.OpenArgs), ",")
For i = 0 To UBound(s1)
Select Case i
Case 0: Me.Caption = s1(0)
Case 1: Me!ラベル1.Caption = s1(1)
Case 2: Me!テキスト0.Value = s1(2)
End Select
Next
End Sub
Private Sub コマンド2_Click()
DoCmd.Close acForm, "F_InputBox"
End Sub
Private Sub コマンド3_Click()
lRet = 1
DoCmd.Close acForm, "F_InputBox"
End Sub
OKボタンがクリックされた場合のメッセージボックスです。
キャンセルボタンがクリックされた場合のメッセージボックスです。