タブストリップでタブを切り替えたときの処理を記述する
Excel のユーザーフォームでタブストリップを設置した場合に、タブを切り替えるとタブストリップ内に設置されているコントロールの表示内容を合わせて切り替えるような処理を記述することができます。ここでは Excel のユーザーフォームに設置したタブストリップでタブを切り替えたときの処理を記述する方法について解説します。
※ タブストリップの基本的な使い方とプロパティの設定方法などについては「VBAでのタブストリップ(TabStrip)の使い方とプロパティおよびイベント」を参照されてください。
(Last modified: )
タブストリップで選択されているタブのインデックスを取得する
例としてタブストリップの中にテキストボックスを一つ設置し、タブを切り替えるとテキストボックスに表示される値を変更するようにしてみます。(なおタブストリップの上に表示されていますが、テキストボックスなどは実際にはユーザーフォームに追加されています)。
最初に選択されているタブを取得する方法です。タブストリップのオブジェクト名が TabStrip1
だった場合、タブストリップの Value
プロパティを参照すると選択されているタブのインデックスを取得できます。
TabStrip1.Value
タブのインデックスは最初のタブが 0 、次以降のタブが 1, 2, ... と続いていきます。
また現在選択されているタブは TabStrip1.SelectedItem
で取得できます。このタブの Index
プロパティを参照することで選択されているタブのインデックスを取得できます。
TabStrip1.SelectedItem.Index
また現在選択されているタブは TabStrip1.SelectedItem
で取得できます。このタブの Index
プロパティを参照することで選択されているタブのインデックスを取得できます。
選択されているタブが変更されたときの処理を記述する
タブストリップで選択されたタブが変更されると Change
イベントが発生します。このイベントに対するイベントプロシージャの中で、選択されたタブのインデックスを取得し、そのインデックスに応じてタブストリップに追加したテキストボックスの値を書き換えます。
具体的には次のように記述します。
Option Explicit Private Sub TabStrip1_Change() Dim tabIndex As Integer tabIndex = TabStrip1.Value If tabIndex = 0 Then TextBox1.Text = "12,000" ElseIf tabIndex = 1 Then TextBox1.Text = "9,000" End If End Sub
またタブストリップが最初に表示されたときに、インデックス 0 のタブを選択し、そのタブに対応する値がテキストボックスに表示されるようにユーザーフォームが表示される前に発生する Initialize
イベントに対するイベントプロシージャの中でコードを記述します。
Option Explicit Private Sub TabStrip1_Change() Dim tabIndex As Integer tabIndex = TabStrip1.Value If tabIndex = 0 Then TextBox1.Text = "12,000" ElseIf tabIndex = 1 Then TextBox1.Text = "9,000" End If End Sub Private Sub UserForm_Initialize() TabStrip1.Value = 0 TextBox1.Text = "12,000" End Sub
これでコードは完成です。次のように実際に記述しました。
ユーザーフォームを表示すると、タブストリップが表示され、最初に一番左側にあるタブが選択されてそれに対応する値がテキストボックスに表示されます。
別のタブをクリックして選択すると、そのタブに対応した値がテキストボックスに表示されます。
このように選択しているタブが変更されたときに、テキストボックスに表示される値を変更することができました。
タブストリップの中で表示する値にワークシートの値を参照する
先ほどのサンプルではタブが変更されたときに、テキストボックスに表示する値として直接値を代入していました。値を直接代入する代わりにワークシートにあらかじめデータを入力しておき、そのワークシートのデータを取得して表示するようにしてみます。
ユーザーフォームがあるブックと同じブック内の "Sheet3" シートに次のようなデータを入力しました。
ユーザーフォームにタブストリップを追加し、タブを一つ追加しました。
ユーザーフォームが表示される前に発生する Initialize
イベントに対するイベントプロシージャの中で、タブに表示する文字列を設定します。この文字列についてもワークシートのセルの値を取得して設定しています。またテキストボックスの初期も設定しています。
Option Explicit Private Sub UserForm_Initialize() Dim i As Integer For i = 0 To 2 TabStrip1.Tabs(i).Caption = Worksheets("Sheet3").Cells(i + 2, 2).Value Next i TabStrip1.Value = 0 TextBox1.Text = Worksheets("Sheet3").Cells(2, 3).Value End Sub
次にタブストリップで選択されたタブが変更されたときに発生する Change
イベントに対するイベントプロシージャの中で、選択されたタブのインデックスを取得し、そのインデックスに応じてタブストリップに追加したテキストボックスの値を書き換えます。ここで設定する値についてもワークシートの値を取得して設定しています。
Option Explicit Private Sub TabStrip1_Change() Dim tabIndex As Integer tabIndex = TabStrip1.Value TextBox1.Text = Worksheets("Sheet3").Cells(tabIndex + 2, 3).Value End Sub
これでコードは完成です。次のように実際に記述しました。
ユーザーフォームを表示すると、タブストリップが表示されそれぞれのタブにはワークシートに入力したデータを参照して設定されます。また最初に一番左側にあるタブが選択されてそれに対応する値がテキストボックスに表示されます。
別のタブをクリックして選択すると、そのタブに対応した値がワークシートから参照されてテキストボックスに表示されます。
-- --
Excel のユーザーフォームに設置したタブストリップでタブを切り替えたときの処理を記述する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。