VBA フォーカスを移動する [VBA]
フォーカスは、現在操作対象となっているコントロールを示します。
例えば、画面上にテキストボックスAと、テキストボックスBの、2つのテキストボックスが配置されているとします。
テキストボックスAにフォーカスがある場合、キーボードから入力を行うと、その内容はテキストボックスAに入力されます。
この時、テキストボックスBへ入力を行いたい場合は、フォーカスをテキストボックスBに移動させます。
フォーカスを移動させるには、通常のユーザの操作では、目的のコントロールをマウスでクリックする、タブキーを押下する、などがあります。
これをVBから行うには、SetFocusメソッドを使用します。
テキストボックスA(txtA)にフォーカスを移動する場合は、
Me.txtA.SetFocus
と、します。
コントロールのメソッドなので、対象となるコントロールにSetFocusメソッドがある場合のみ使用可能です。
入力系のコントロールであれば、テキストボックス(TextBox)、コンボボックス(ComboBox)、リストボックス(ListBox)、チェックボックス(CheckBox)などです。
フォーカスを移動させようとしているコントロールが、フォーカスを受け取れない状態の場合は、エラーになります。
Enabled(使用可能)プロパティがFalseの時などです。
複数のフォームを開いた状態で、目的のフォームに切り替える場合は、
Forms("FormA").SetFocus
と、します。
別のフォームのコントロールに対してSetFocusを行っても、フォームは切り替わりません。
例えば、
Forms("FormA").txtB.SetFocus
としても、フォームは現在のフォームのままになります。
この後、
Forms("FormA").SetFocus
とすると、
フォームAのtxtBにフォーカスがある状態で、フォームAに切り替わります。
同様に DoCmd.GoToControlでも、フォーカスを移動させることができます。
DoCmd.GoToControl "txtA"
と、することで、txtAにフォーカスが移動します。
SetFocusメソッド、DoCmdともに動作は同じですが、SetFocusメソッドが推奨です。
コメント 0