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の操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

サービス一覧

最後までお読みいただき、ありがとうございました。