ACCESS VBA 次のコントロールへ移動させる機能
ACCESSでは、複数のフォームを移動しながら入力を行うことができます。
フォームAからフォームBを呼び出し、Bでの入力値をAに反映する、といった動作が可能です。
この際、フォームAに戻ってから次のコントロールへカーソルを自動で移動させたいという場合があります。
今回は、ACCESSのVBAを使って、次のコントロールへ移動させる機能をご紹介します。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSで実際に作成したフォームやレポートを、その作成方法と共にご紹介していきます。
エンターキー入力コマンド
次のコントロールへカーソルを移動させるには以下のコマンドを利用します。
SendKeys "{ENTER}"
もしくは
SendKeys "{TAB}"
SendKeysステートメントは、その後に入力した値に応じて、キーボードでキー入力したのと同じ効果を発揮できます。
次のコントロールに移動させるには、EnterキーかTabキーを入力させれば問題ありません。
次のコントロールに移動させるシーン
しかし、通常はフォーム上でテキストボックスなどに値を入力し、Enterキーを押せば自動で次のコントロールに移動します。
あえて次のコントロールに移動するコマンドを記述しなければいけないシーンはどんなものでしょうか。
それは、テキストボックスへの値の入力を別フォームを利用して行う場合です。
例えば、以下のフォームEnter1を作成しました。
よくある入力フォームです。
このフォームの顧客名を、別フォームEnter2のリストから入力できるようにしたいと思います。
こちらがもう一つのフォームです。
顧客名がリスト化されています。
作りたい機能としては、Enter1の顧客名をクリックしたときにEnter2が開き、Enter2で顧客名を選択すると、それをEnter1の顧客名に反映しつつEnter2を閉じ、Enter1は次のコントロールである数量にカーソルを動かす、というものになります。
イベントプロシージャの中身を見ていきましょう。
まず事前に標準モジュールに以下の変数を設定します。
Public target_ctr As Control
Enter1の対象コントロールを格納するための変数です。
その上で、Enter1フォームの顧客名クリック時イベントには以下のプロシージャを設定します。
Private Sub 顧客名_Click()
Set target_ctr = Screen.ActiveControl
DoCmd.OpenForm "T_Enter2"
End Sub
target_ctrに現在のアクティブなコントロール、つまり顧客名テキストボックスを格納したうえで、Enter2フォームを開きます。
Enter2フォームの顧客名プルダウンには更新後イベントに以下のプロシージャを設定します。
Private Sub 顧客名_AfterUpdate()
target_ctr.Value = Me!顧客名
DoCmd.Close
SendKeys "{ENTER}"
End Sub
target_ctrのValueプロパティを使って、Enter2フォームで指定した顧客名をEnter1フォームの顧客名に入力します。
その後、Enter2フォームをクローズしてEnter1フォームに戻ります。
その後に、SendKeys “{ENTER}”で次のコントロールに移る、という処理内容になっています。
以上、次のコントロールへ移動させる機能をご紹介しました。
ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。
最後までお読みいただき、ありがとうございました。