ACCESS VBA GoToControlでカーソルを移動させる
ACCESSのフォームでメッセージを出した際に、ユーザーに次に入力する部分を明示するためにカーソルを指定のテキストボックスなどに移動させたい場合があります。
そんな時に利用できるのが、DoCmd.GoToControlメソッドです。
この記事では、ACCESSのフォームで、DoCmd.GoToControlメソッドを使って、指定のテキストボックスやボタンにカーソルを移動させる方法をご紹介します。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは基本機能だけでも十分便利ですが、VBAを使うことで格段に使いやすいデータベースを作成可能です。
この記事ではACCESSでのVBAの使い方をご紹介していきます。
DoCmd.GoToControlメソッド
フォームに配置されたテキストボックスやボタンを総称して、コントロールと呼びます。
フォーム上で任意のコントロールにカーソルを移動したいときに使用するのが、DoCmd.GoToControlメソッドです。
以下の構文で利用します。
DoCmd.GoToControl “コントロール名”
コントロール名だけを指定する単純な構文です。
ただし、指定可能なコントロールはその時点でアクティブなフォームだけに限られます。
別フォームのコントロールに移動させたい場合などは、DoCmd.OpenFormメソッドなどと組み合わせた工夫が必要です。
VBAでの利用例
実際にVBAで利用する例を示します。
DoCmd.GoToControlがよくつかわれるのはエラーチェックの処理かなと思います。
エラーをチェックしてエラーがあった場合は、警告メッセージを出すとともにエラーのある個所にカーソルを移動してあげるとユーザーには親切です。
この際にDoCmd.GoToControlが使われます。
サンプルとして以下のフォームを作成しました。
テキスト1、テキスト2の2つの入力欄があり、入力後にチェックボタンでチェックをするフォームです。
入力漏れがあった場合は以下のエラーが表示され、入力漏れ箇所にカーソルが移動します。
では作成方法を見ていきましょう。
フォームをデザインビューで作成します。
テキストボックスとボタンを以下のように配置しました。
チェックボタンにイベントを設定します。
チェックボタンを選択した状態でプロパティシートのイベントタブから「クリック時」を選択し、「・・・」ボタンを押してVisual Basic Editorを起動します。
チェックボタンのクリック時イベントには以下のプロシージャを設定します。
Private Sub チェック_ボタン_Click()
If IsNull(Me!テキスト1) Or Me!テキスト1 = "" Then
MsgBox "テキスト1が入力されていません。", vbCritical + vbOKOnly, "テキスト1未入力"
DoCmd.GoToControl "テキスト1"
End If
If IsNull(Me!テキスト2) Or Me!テキスト2 = "" Then
MsgBox "テキスト2が入力されていません。", vbCritical + vbOKOnly, "テキスト2未入力"
DoCmd.GoToControl "テキスト2"
End If
End Sub
If文が2つ連続する構成になっています。
If IsNull(Me!テキスト1) Or Me!テキスト1 = "" Then
でテキストボックスが入力されているかどうかを判定しています。
何も入力されていなければメッセージを表示した後に、
DoCmd.GoToControl "テキスト1"
でカーソルをテキスト1へ移動させるという処理をしています。
これをテキスト2にも同様に適用しています。
このように、DoCmd.GoToControlを使うとユーザーが次にどのコントロールを操作すればよいか示すことができ、操作性を高めることが可能です。
以上、GoToControlでカーソルを移動させる方法をご紹介しました。
ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。
最後までお読みいただき、ありがとうございました。