Accessでユーザーを意識した処理をする際に、入力用ダイアログボックスを用いると便利な場合があります。例えば、あるフォームは特定のパスワードを知った者しか開くことができないようにする場合や、条件に応じてユーザーに値の入力を求める場合などが挙げられます。
今回は、入力用ダイアログボックスとしてInputBox関数について紹介します。
サンプルとして、2つのフォームを用意し、片方からもう一方のフォームを開く際にパスワードを確認する仕組みを設けます。仮に、パスワードが間違っていたら、フォームを開くことができないようにし、ユーザーに対する制限をかける方法です。
まずは、InputBox関数について確認をし、その後にサンプルフォームによる使用例を見ていきましょう。
InputBox関数について
InputBox関数は、ダイアログ ボックスにプロンプトを表示し、ユーザーがテキストを入力するかボタンをクリックするまで待機し、テキスト ボックスのコンテンツが含まれる文字列を返すための関数です。基本構文は次のように記載されます。
InputBox(prompt, [title], [default], [xpos], [ypos], [helpfile, context])
引数 | 説明 |
prompt | 省略不可。 ダイアログ ボックスにメッセージとして表示される文字列式です。 使用する文字の幅により、prompt は最大で約 1024 文字使用できます。 prompt が複数の行にまたがる場合、行と行の間に「vbCrLf」を使用して行を分けることができます。 |
title | 省略可能。 ダイアログ ボックスのタイトル バーに表示される文字列式です。 title が省略された場合、タイトル バーには「Microsoft Access」が表示されます。 |
default | 省略可能。 他の入力が提供されない場合に既定の応答としてテキスト ボックスに表示される文字式です。 default が省略された場合、空の状態のテキスト ボックスが表示されます。 |
xpos | 省略可能。 画面の左端からダイアログ ボックスの左端までの水平方向の距離を twip 単位で示す数値式です。 xpos が省略された場合、ダイアログ ボックスは水平方向の中央寄せで表示されます。 |
ypos | 省略可能。 画面の上部からダイアログ ボックスの上端までの縦方向の距離を twip 単位で示す数値式です。 ypos が省略された場合、ダイアログ ボックスは画面を約3分の1下に下がった位置に垂直方向に配置されます。 |
helpfile | 省略可能。 ダイアログ ボックスに状況依存のヘルプを提供するときに使用するヘルプ ファイルを識別する文字列式です。 helpfile を指定する場合は、context も必ず指定する必要があります。 |
context | 省略可能。 ヘルプ作成者によって適切なヘルプ トピックに割り当てられたヘルプ コンテキスト番号を示す数式です。 context を指定する場合は、helpfile も必ず指定する必要があります。 |
このように、様々な引数を用いてInputBox関数の表示について設定をすることができますが、今回は簡単な使用方法を見ていきます。
それでは、まずはサンプルフォームを作成します。
サンプルフォームについて
まずは、「F_フォーム1」フォームを作成します。図1に示すように新規にフォームを作成し、デザインビュー上でラベルの追加、背景色の設定をします。
続いて、「cmd_Form2」コマンドボタンを追加します。そして、追加したコマンドボタンの「クリック時」プロパティにはイベントプロシージャを設定します。
次に、「F_フォーム1」からの移動先として「F_フォーム2」フォームを作成します。図2に示すように、ラベルの追加、背景色の設定をします。
ここで、いったん「F_フォーム1」フォームに戻り、先ほど作成した「cmd_Form2」コマンドボタンの「クリック時」プロパティに設定したイベントプロシージャの中身を追加していきます。
図1にも示されていますが、「イベントプロシージャ」と記載されている右側に「…」ボタンがありますので、これをクリックしてください。すると、図3のようにVBA画面が表示されます。
図3のように、最初は何のコードも書かれていませんので、下に示すようにコードを追記してください。
Private Sub cmd_Form2_Click() Dim PW As String Dim inputPW As String 'あらかじめパスワードを設定する。 PW = "PASSWORD12345" 'InputBox関数を用いてユーザーにパスワード入力を求める。 inputPW = InputBox("半角英数字でパスワードを入力してください。", "パスワード入力") 'パスワード判定 If StrPtr(inputPW) = 0 ThenMsgBox "キャンセルされました。"
ElseIf PW = inputPW ThenMsgBox "パスワードを照合できました。" & vbCrLf & "フォーム2を開きます。"
'F_フォーム1を閉じる。
DoCmd.Close
'F_フォーム2を開く。
DoCmd.OpenForm "F_フォーム2", acNormal
ElseMsgBox "パスワードが間違っています。"
End If End Sub
ここでの処理は、初めにパスワードとして文字列の「PASSWORD12345」を「PW変数」に格納し、続いてInputBox関数を用いて、ユーザーが入力した値を「inputPW変数」に格納する処理をとっています。
実際に「F_フォーム1」上の「cmd_Form2」コマンドボタンをクリックすると、図4に示すようにパスワード入力を促すダイアログボックスが表示されます。
ここで、表示されるダイアログボックスには「キャンセル」ボタンがあり、ユーザーがこれをクリックすると、「値0の文字列」という特殊な値が返されます。そして、「値0の文字列」が返されたかを確認するためには、「StrPtr関数」を用いる必要があります。
StrPtr(args)
引数argsに指定されたString型の変数のアドレスを返します。「値0の文字列」が指定された場合は、「0」を返します。
パスワード判定の処理ではIf文を用いて条件に応じた処理の分岐をしていますが、まずは「キャンセル」ボタンがクリックされた場合は、StrPtr関数により「0」が返されるため、これにより判断をします(図5参照)。
Else Ifによる次の条件は「PW変数」と「inputPW変数」が一致した場合であり、この時は「F_フォーム2」フォームを開く処理をします(図6参照)。
まず「Docmd.Close」で「F_フォーム1」フォーム自身を閉じます。そして、「DoCmd.OpenForm “F_フォーム2”, acNormal」により「F_フォーム2」フォームを開く処理をします。
最後に、InputBoxに間違ったパスワードを入力した場合、「パスワードが間違っています。」というメッセージを出して処理が終了します(図7参照)。
このようにして、InputBox関数を活用することで、容易にユーザーへの入力を促し、入力された値に基づき、様々な処理を施すことができます。
まとめ
今回は、入力用ダイアログボックスとしてInputBox関数について、その活用方法を紹介をしました。ユーザーが入力した値をそのままテーブルに追加することもできますし、設定によってはクエリの抽出条件にすることもでき、様々な場面で応用することができますので、この機会に使い方を知っていただけると良いかと思います。
スポンサーリンク
コメント