PR

Accessで入力用ダイアログボックスを用いる InputBoxの活用

VBA

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」コマンドボタンを追加します。そして、追加したコマンドボタンの「クリック時」プロパティにはイベントプロシージャを設定します。

図1 フォーム1の作成

次に、「F_フォーム1」からの移動先として「F_フォーム2」フォームを作成します。図2に示すように、ラベルの追加、背景色の設定をします。

図2 フォーム2の作成

ここで、いったん「F_フォーム1」フォームに戻り、先ほど作成した「cmd_Form2」コマンドボタンの「クリック時」プロパティに設定したイベントプロシージャの中身を追加していきます。

図1にも示されていますが、「イベントプロシージャ」と記載されている右側に「…」ボタンがありますので、これをクリックしてください。すると、図3のようにVBA画面が表示されます。

図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 Then

  MsgBox "キャンセルされました。"

ElseIf PW = inputPW Then

  MsgBox "パスワードを照合できました。" & vbCrLf & "フォーム2を開きます。"
  
  'F_フォーム1を閉じる。
  DoCmd.Close

  'F_フォーム2を開く。
  DoCmd.OpenForm "F_フォーム2", acNormal

Else

  MsgBox "パスワードが間違っています。"

End If

End Sub

ここでの処理は、初めにパスワードとして文字列の「PASSWORD12345」を「PW変数」に格納し、続いてInputBox関数を用いて、ユーザーが入力した値を「inputPW変数」に格納する処理をとっています。

実際に「F_フォーム1」上の「cmd_Form2」コマンドボタンをクリックすると、図4に示すようにパスワード入力を促すダイアログボックスが表示されます。

図4 InputBoxの表示

ここで、表示されるダイアログボックスには「キャンセル」ボタンがあり、ユーザーがこれをクリックすると、「値0の文字列」という特殊な値が返されます。そして、「値0の文字列」が返されたかを確認するためには、「StrPtr関数」を用いる必要があります。

StrPtr(args)
引数argsに指定されたString型の変数のアドレスを返します。「値0の文字列」が指定された場合は、「0」を返します。

パスワード判定の処理ではIf文を用いて条件に応じた処理の分岐をしていますが、まずは「キャンセル」ボタンがクリックされた場合は、StrPtr関数により「0」が返されるため、これにより判断をします(図5参照)。

図5 キャンセルボタンをクリックした場合

Else Ifによる次の条件は「PW変数」と「inputPW変数」が一致した場合であり、この時は「F_フォーム2」フォームを開く処理をします(図6参照)。

まず「Docmd.Close」で「F_フォーム1」フォーム自身を閉じます。そして、「DoCmd.OpenForm “F_フォーム2”, acNormal」により「F_フォーム2」フォームを開く処理をします。

図6 InputBoxに正しいパスワードを入力した場合

最後に、InputBoxに間違ったパスワードを入力した場合、「パスワードが間違っています。」というメッセージを出して処理が終了します(図7参照)。

図7 InputBoxに間違ったパスワードを入力した場合

このようにして、InputBox関数を活用することで、容易にユーザーへの入力を促し、入力された値に基づき、様々な処理を施すことができます。

まとめ

今回は、入力用ダイアログボックスとしてInputBox関数について、その活用方法を紹介をしました。ユーザーが入力した値をそのままテーブルに追加することもできますし、設定によってはクエリの抽出条件にすることもでき、様々な場面で応用することができますので、この機会に使い方を知っていただけると良いかと思います。

スポンサーリンク

Kindle Unlimitedにサインアップして無料体験に登録する
Kindle Unlimitedに登録すると、人気のシリーズ、ベストセラー、名作などに好きなだけアクセスして、シームレスなデジタル読書体験を実現できます。

コメント

タイトルとURLをコピーしました