コントロールのタブオーダーを設定する(TabIndex,TabStopプロパティ)
ユーザーフォームに設置したコントロールのタブオーダーを設定するには TabIndex プロパティを使用します。タブオーダーというのは、タブキーが押されたときにフォーカスが移動する順番のことです。ここでは Excel のユーザーフォームで TabIndex プロパティを使ってコントロールのタブオーダーを設定する方法、および TabStop プロパティを使ってコントロールがフォーカスを受け取らないように設定する方法について解説します。
(Last modified: )
タブオーダーを設定する(TabIndex)
ユーザーフォームに設置したコントロールのタブオーダーを設定するには TabIndex
プロパティを使用します。デフォルトでは TabIndex
の値はユーザーフォームに追加された順番に 0, 1, 2, ... と割り当てられていきます。
TabIndex
プロパティの値は重複した値は設定できません。コントロールの TabIndex
プロパティの値を変更すると、自動的にそれ以外のコントロールの TabIndex
プロパティの値は変更されます。例えば元々 3 のコントロールを 1 に変更すると、 1 だったコントロールが 2 に変わり、 2 だったコントロールが 3 に変わります。
コントロールのタブオーダーを設定するには TabIndex
プロパティをクリックし、値を直接編集してください。
変更した結果、このユーザーフォームに表示されているコントロールのタブオーダーは次のようになりました。
それではユーザーフォームを表示したあと TAB
キーを押してフォーカスを移動させてみます。すると先ほど設定したタブオーダーの順番にフォーカスが移動しました。
このように TabIndex
プロパティの値を変更することで、タブオーダーを設定することができます。
タブキーで移動したときにフォーカスを受け取らない(TabStop)
TAB
キーを押していくとフォーカスが順に移動していきますが、フォーカスを受け取らないように設定するには TabStop
プロパティを使用します。デフォルトでは TabStop
の値は「True」になっておりフォーカスを受け取ります。
フォーカスを受け取らないように設定するには TabStop
プロパティの項目をクリックしてください。そして表示されたドロップダウンメニューをクリックし、「False」をクリックしてください。
なお TabStop
プロパティの値を変更しても TabIndex
プロパティの値に影響はありません。フォーカスを受け取る順番が来ても受け取らず、その次のコントロールにフォーカスが移動します。
今回は例として次のコントロールの TabStop
プロパティの値を「False」に変更しました。
それではユーザーフォームを表示したあと TAB
キーを押してフォーカスを移動させてみます。すると先ほど TabStop
プロパティの値を「False」に設定したコントロールはフォーカスを受け取らずに次のコントロールがフォーカスを受け取りました。
VBAのプログラムの中でTabIndexプロパティを設定する
プロパティウィンドウを使って TabIndex
プロパティの値を変更する代わりに、 VBA のコードを記述して TabIndex
プロパティの値を変更することもできます。
プログラムの中で TabIndex
プロパティを設定する場合は次の書式を使用します。
オブジェクト.TabIndex [= Integer ]
対象のオブジェクトの TabIndex
プロパティに対してタブオーダーを表す数値を代入してください。数値は 0 から始まる数値です。負の値を代入するとエラーとなります。
またプロパティウィンドウを使って TabStop
プロパティの値を変更する代わりに、 VBA のコードを記述して TabStop
プロパティの値を変更することもできます。
プログラムの中で TabStop
プロパティを設定する場合は次の書式を使用します。
オブジェクト.TabStop [= Boolean ]
対象のオブジェクトの TabStop
プロパティに対して「True」または「False」を代入してください。「True」を設定するとフォーカスを受け取ります。「False」を設定するとフォーカスを受け取りません。
簡単なサンプルで試してみます。ユーザーフォームが表示される前に発生する Initialize
イベントに対するイベントプロシージャを作成し、その中で TabIndex
プロパティの値を設定します。ユーザーフォームが表示される前にコントロールのプロパティの設定が行われます。
※ Initialize
イベントに対するイベントプロシージャの使い方については「ユーザーフォームを表示する直前に発生するイベント(Initializeイベント)」を参照されてください。
ユーザーフォームのコントロールが何もないところをダブルクリックしてください。
ユーザーフォームの規定のイベントである Click
イベントに対するイベントプロシージャが表示されます。
今回はユーザーフォームの Initialize
イベントに対するイベントプロシージャ使用するので、コードウィンドウで次のようにイベントプロシージャを追加で記述してください。
Private Sub UserForm_Initialize() TextBox1.TabIndex = 0 TextBox2.TabIndex = 1 CommandButton1.TabIndex = 2 CommandButton2.TabIndex = 3 TextBox2.TabStop = False End Sub
これでコードの記述は完了です。では実際に試してみます。「Sub/ユーザーフォームの実行」をクリックしてください。
ユーザーフォームが表示されました。
TAB
キーを押すと、タブオーダーの順番通りにフォーカスが移動していきますが、今回 2 番目のコントロールであるテキストボックスの TabStop
プロパティの値に「False」を設定してあるのえ、その次のコントロールにフォーカスが移動します。
このように VBA のプログラムの中で TabIndex
プロパティおよび TablStop
プロパティの値を変更することができました。
-- --
Excel のユーザーフォームで TabIndex プロパティを使ってコントロールのタブオーダーを設定する方法、および TabStop プロパティを使ってコントロールがフォーカスを受け取らないように設定する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。