たま氏の覚え書き

KNIME・AccessVBA・Swift等、学習したことを覚え書き

AccessVBA_フォームの操作その4_フォーカスの移動時に処理を行う【GotFocus】

フォーム内のあるコントロールから別のコントロールにフォーカスが移ったと同時に
何かしらの処理を行う方法

イベント【GotFocus】とは

あるコントロールから別のコントロールにフォーカスが移った際に発生するイベント
このタイミングで、別のコントロールから値をコピーしたりすることができる

記述例1_フォームのモジュール内のGotFocusイベントに記述▼

Private Sub txt2_GotFocus()
 If IsNull(Me.txt2.Value) Then
  Me.txt2.Value = "何か入力して"
 End If
End Sub


▼処理結果▼
→→→
※上のボックス(txt1)から下のボックス(txt2)へフォーカスが移動したと同時に文字が入力された


記述例2_フォームのモジュール内のGotFocusイベントに記述▼

Private Sub txt2_GotFocus()
  Me.txt2.Value = Me.txt1.Value
End Sub


▼処理結果▼
→→→
※上のボックス(txt1)から下のボックス(txt2)へフォーカスが移動したと同時に上のボックスの値を下のボックスに反映した

【SelStart】でカーソルの位置を調整

テキストボックスのSelStartプロパティを使用し、
選択したテキストの開始位置、またはテキストが選択されている場合のカーソル位置を指定
コントロールのフォーカスが移った後の入力を、フォーム利用者が扱いやすいよう工夫することができる

▼参考記事▼
TextBox.SelStart プロパティ (Access) | Microsoft Learn

記述例3_フォームのモジュール内のGotFocusイベントに記述▼

Private Sub txt2_GotFocus()
    Me.txt2.Value = Me.txt1.Value
    Me.txt2.SelStart = Nz(InStr(Me.txt1.Value, "@"), 0)
End Sub


▼処理結果▼
→→→
※上のボックス(txt1)から下のボックス(txt2)へエンターキーかタブキーでフォーカスが移動したと同時に
 上のボックスの値を下のボックスに反映しつつカーソルが「@」の後に位置するようにした

▼Nz関数解説記事▼
Nz関数 …Null値をほかの値に変換する - Officeのチカラ

【参考】エンターキーによるコントロールの移動

Accessでエンターキーによるコントロールの移動ができない場合には下記設定を確認
事前準備としてあらかじめ確認しておくとよいかも

メニューバー
→[ツール]
→[オプション]
→[オプション]ダイアログ
→[キーボード]タグ
→左上の「Enter キー入力後の動作」
→「次のフィールド」を選択