Accessでデータベースを作成する際に、ユーザーインターフェースとしてフォームを作成します。特に、複数のユーザーでデータベースを取り扱う場合、適切なデータ入力をしてもらうため、テーブルに直接データを入力するのではなく、一度フォームを介して登録する方法が有効です。
この際に、データの整合性確認やマスタテーブルから情報を抽出する等の省力化を図ることも可能です。さらに、エラーチェックをした際に、ユーザーへの気づきとして文字色を変えるといったこともVBAで操作可能です。
今回は、フォーム上のテキストボックスに対する操作で良く行う手法を紹介していきます。なお、フォームの作成については以下の記事をご参照ください。
サンプルフォームについて
Access VBAによるフォームの操作を行うにあたり、図1に示すサンプルフォームを作成します。
また、テキストボックスを3つ、コマンドボタンを1つ、チェックボックスを1つそれぞれフォーム上に配置し、プロパティで変更した内容を以下に示します。(なお、数字は全て半角です。)
■フォームのプロパティ
フォーム名称: サンプルフォーム
背景色: #FCE6D4(カラーパレット上の淡い橙色)
■テキストボックス(3つ用意)のプロパティ
□1つ目
名前: テキストボックス1
立体表示: くぼみ
□2つ目
名前: テキストボックス2
立体表示: くぼみ
□3つ目
名前: テキストボックス3
立体表示: くぼみ
■コマンドボタンのプロパティ
名前: コマンドボタン
■チェックボックスのプロパティ
名前: チェックボックス
イベントについて
VBAでソースコードを記入する際に、どのような操作をきっかけに処理を開始するかがポイントになります。 例えば、テキストボックスの情報を更新した直後、テキストボックスのフォーカスが外れた段階、コマンドボタンをクリックした際、等が挙げられ、これらきっかけとなる操作を「イベント」といいます。
これらイベントは、各オブジェクトのプロパティ画面で確認することができ、例えば、図2のように「更新後処理」のプロパティに「イベントプロシージャ」を設定し「…」ボタンをクリックすると、VBA画面が開いてソースコードを入力できるようになります。
良く使うイベントとして、「更新後処理」、「フォーカス喪失時」、「クリック時」がありますが、その他にもユーザーの使用方法と希望する処理タイミングからイベントを決めることが肝要です。
背景色の変更方法
サンプルフォームではテキストボックスを3つ用意していますが、まずは、「テキストボックス1」に値を入力した後、背景色を「赤色」に変える方法を見てみましょう。
先ほど、図3に示すテキストボックス1のソースコード入力画面を作成しました。この中に次のようにコードを追加します。
Private Sub テキストボックス1_AfterUpdate()
テキストボックス1.BackColor = RGB(255, 0, 0)
'追加するコード
End Sub
このソースコードの意味は、テキストボックス1の値を更新した後、テキストボックス1の背景色(BackColor)プロパティをRGB(255, 0, 0)(=赤)で指定する色に設定することを示しています。
ソースコードの入力を終えたら、サンプルフォームの作成画面に戻り、フォームビューに切り替えてみましょう。テキストボックス1に「TEST」と入力し、Enterキーを押下すると、テキストボックス1の背景色が赤色に変わります。
入力文字のチェック方法
次に、テキストボックス2に値を入力した際に、その値が半角数字でなければ、メッセージボックスを表示して注意をするとともに、テキストボックス2の値を強制的に削除し、再度入力させるようにする方法を見てみましょう。なお、今回紹介する方法は、半角数字を入力しない限り、テキストボックスからフォーカスを外すことができなくします。
先ほどと同様に、テキストボックス2のプロパティシートを開き、「フォーカス喪失時」にイベントプロシージャを設定し、「…」をクリックします。
そして、以下のコードを追加します。
Private Sub テキストボックス2_Exit(Cancel As Integer)If Not IsNumeric(テキストボックス2.Value) Then
'If文以下を追加MsgBox "数字が入力されていません。"
'メッセージボックスの表示テキストボックス2.Value = ""
'テキストボックス2の値を削除Cancel = True
'フォーカス喪失をキャンセルEnd If
End Sub
今回のコードでは、まず「Not IsNumeric」でテキストボックス2の値が数値でない場合をTrueとしたIf文を作成しています。そして、Trueとなった場合に、メッセージボックスを表示し、テキストボックス2の値を削除(実際は””としている。)、最後にフォーカス喪失操作をキャンセルする内容としています。
ここで、If文については、以下の記事で説明をしていますので、ご参照ください。
ソースコードの入力を終えたら、サンプルフォームの作成画面に戻り、フォームビューに切り替えてみましょう。テキストボックス2に半角数字を入力すれば、何事もなくテキストボックス3にフォーカスが切り替わりますが、半角数字を入力しないと、図6に示すメッセージボックスが表示されて、テキストボックス2の再入力を強制する状態になります。
まとめ
今回は、Access VBAによるテキストボックス操作方法について紹介をしました。イベントとの組み合わせにより、様々な操作をすることができ、また入力者への気づきを与えることも可能となります。制御文と組み合わせることで、より効果的なインターフェースを作成することができますので、今回紹介した例を参考にしていただければと思います。次回は、残りのコマンドボタンやチェックボックスを用いたデータ処理のテクニックについて紹介をします。
スポンサーリンク
コメント
ACCESSのマクロについて教えてください。
ある学校で生徒募集の広告に対して、問合せしてきた人の情報を管理するためのデータベースを作ろうとしています。
クエリであるQ_生徒マスターをレコードソースとするフォームに、Q_検索用をレコードソースとするF_検索用サブフォーム(下図の右端)を配置し、サブフォームのレコードセレクタをクリックするなどして選択し、マクロを使って下図にある「00262」というper_id(メインフォームの「生徒ID」に相当)を取得して、Q_生徒マスターのフィールドper_idを検索してメインフォームに表示したいのです。
F_検索用サブフォームは、テキストボックス(sbx_カナ)に、登録者の名前の読みの一部を入力し、これでQ_生徒マスターのフィールドper_idをあいまい検索して候補のレコードを表示するよう簡単なVBAを書き込んでいます。
ここまではできているのですが、候補のper_idをメインフォーム側に受け渡す仕掛けで悪戦苦闘しています。
「あいまい検索」としているのは、名前の読みを間違えたり忘れたりするとまったく候補を得られない「完全一致検索」は実務上の効率が悪いからです。
できれば、VBAの使用は簡単なものにとどめて、埋め込みマクロで解決したいと思うのですが、お知恵を拝借できないでしょうか?
ご質問をありがとうございました。
別途、貴メールアドレスに返信をさせていただきましたのでご確認ください。
なお、お問い合わせにつきましては、以下URLからお願いいたします。
https://www.latest-info-system.com/contact/
今後とも、宜しくお願いいたします。