#457 入力値に応じてフォーカス移動先を変えるには? フォーム、VBA

フォームのコントロールの一般的かつ固定的なフォーカス移動順は、[表示]-[タブ オーダー]メニューによって表示される「タブ オーダー」ダイアログ、あるいは各コントロールの「タブ移動順」プロパティで設定することができます。

一方、VBAのプログラムによって動的に次のフォーカスを指定するには、「コントロール名.SetFocus」というコードを実行します。

ここで、あるテキストボックスに入力されている値に応じて次のフォーカス移動先を指定するには、テキストボックスコントロールの"LostFocus/フォーカス喪失後"イベントと上記のSetFocusメソッドを組み合わせてプログラムを作ります。

次の例では、「txtbox1」テキストボックスに入力された値が、1000より大きければtxtbox2コントロールへ、1000以下でかつ500より大きければtxtbox3コントロールへ、それら以外ならtxtbox4コントロールへフォーカスを移動させています。
なお、LostFocusイベントを使っていますので、txtbox1テキストボックス上でEnterキーもしくはTabキーが押されたときにこの処理が実行されます。

Private Sub txtbox1_LostFocus()
'テキストボックスのフォーカス喪失後

  '入力値によって次のフォーカスを設定
  If Me!txtbox1 > 1000 Then
    txtbox2.SetFocus
  ElseIf Me!txtbox1 > 500 Then
    txtbox3.SetFocus
  Else
    txtbox4.SetFocus
  End If

End Sub



実行例:
  • 1200と入力してEnterキーを押したとき
    1200と入力してEnterキー
  • 700と入力してEnterキーを押したとき
    700と入力してEnterキー
※この例ではLostFocusイベントを使っていますので、テキストボックスに一切編集を加えていない状態でEnterキーなどを押した場合にも同じようなフォーカス移動が行われます。もし、通常はタブ移動順プロパティでの設定順にフォーカス移動させ、テキストボックスが更新されたときだけ特別なフォーカス移動をさせたい場合には、"AfterUpdate/更新後処理"イベントプロシージャに同じコードを記述します。
| Index | Prev | Next |

この情報は参考になりましたか?、問題は解決しましたか?、もしまだなら......
T'sWareのワンポイトテクニカルアドバイスをご利用ください。3000円/件〜でご支援します。
スタンドアロンからSQL Server対応まで、オーダーメイドのシステムを短納期・安価でお届けします


Copyright © T'sWare All rights reserved