VBA でタブ コントロール オブジェクトを参照する
タブ コントロールを使用して、1 つのフォームに関するいくつかのページの情報を表示します。 タブ コントロールは、2 つ以上のカテゴリに分類できる情報がフォームに含まれている場合に役立ちます。
ほとんどの場合、タブ コントロールはフォーム上の他のコントロールと同様に機能し、フォームの Controls コレクションのメンバーと呼ばれます。 たとえば、Form1 という名前のフォーム上の TabControl1 という名前のタブ コントロールを参照するために、次の式を使用できます。
Form1.Controls!TabControl1
ただし、 Controls コレクションは Form オブジェクトの既定のコレクションであるため、 Controls コレクションを明示的に参照する必要はありません。 つまり、次のように、Controls コレクションへの参照は式から省略できます。
Form1!TabControl1
Pages コレクションを参照してください
タブ コントロールには 1 つ以上のページが含まれます。 タブ コントロール内の各ページは、タブ コントロールの Pages コレクションのメンバーとして参照されます。 Pages コレクション内の各ページは、PageIndex プロパティ設定 (0 から始まるコレクション内のページの位置を反映) またはページの Name プロパティ設定によって参照できます。
TabControl オブジェクトには既定のコレクションがないため、インデックス値によって Pages コレクション内の項目を参照する場合、または Pages コレクションのプロパティを参照する場合は、Pages コレクションを明示的に参照する必要があります。
たとえば、Pages コレクション内のインデックス値を参照して TabControl1 という名前のタブ コントロールの最初のページの Caption プロパティの値を変更するには、次のステートメントを使用できます。
TabControl1.Pages(0).Caption = "First Page"
各ページはフォームの Controls コレクションのメンバーであるため、タブ コントロールの名前またはタブ コントロールの Pages コレクションを参照しなくても、その "Name/名前" プロパティだけを使ってページを参照できます。 たとえば、その "Name/名前" プロパティが Page1 に設定されたページの "Caption/標題" プロパティの値を変更するには、次の構文を使用します。
Page1.Caption = "First Page"
注:
ユーザーまたはコードがページの "PageIndex/ページインデックス" プロパティを変更すると、ページのインデックスへの参照と、ページの順序内でのページの位置が変化します。 このとき、ページへの絶対参照を維持したい場合は、ページの "Name/名前" プロパティを参照します。
Pages コレクションには、タブ コントロール内のページ数を返す 1 つのプロパティ Count があります。 このプロパティはタブ コントロール自体のプロパティではなくその Pages コレクションのプロパティなので、コレクションを明示的に参照しなければならないことに注意してください。 たとえば、TabControl1 のページ数を調べるには、次の構文を使用します。
TabControl1.Pages.Count
現在のページを参照して変更する
タブ コントロールの既定のプロパティは Value で、現在のページを識別する整数を返します。最初のページの場合は 0、2 番目のページの場合は 1 などです。 Value プロパティは、VBA コードまたは式でのみ使用できます。 実行時に Value プロパティを読み取ることで、現在どのページが一番上にあるかを判断できます。 たとえば、次のステートメントは TabControl1 の現在のページの値を返します。
TabControl1.Value
注:
Value プロパティはタブ コントロールの既定のプロパティであるため、明示的に参照する必要はありません。 このため、前の例から省略 .Value
できます。
タブ コントロールの "Value/値" プロパティを実行時に設定すると、指定されたページにフォーカスが移り、そのページがカレント ページとなります。 たとえば、次の構文により、フォーカスが TabControl1 の 3 ページ目に移ります。
TabControl1 = 2
これは、タブ コントロールの Style プロパティを None (タブを表示しない) に設定し、フォームのコマンド ボタンを使用してフォーカスがあるページを決定する場合に便利です。 コマンド ボタンを使用してページを表示するには、ボタンの OnClick イベントにイベント プロシージャを追加し、タブ コントロールの Value プロパティを適切なページを識別する整数に設定します。
Pages コレクションの "Value/値" プロパティを使用することにより、前面に表示されているページに対して実行時にプロパティを設定できます。 たとえば、ページの Visible プロパティを False に設定することで、現在のページとそのすべてのコントロールを非表示にすることができます。 次の構文は、TabControl1 のカレント ページを非表示にします。
TabControl1.Pages(TabControl1).Visible = False
タブ コントロールの各ページには、ページ コントロールの Value プロパティと同じ番号付けシーケンスを使用して Pages コレクション内のページの位置を指定する PageIndex プロパティもあります。最初のページの場合は 0、2 番目のページの場合は 1 などです。 ページの "PageIndex/ページインデックス" プロパティの値を設定すると、タブ コントロール内でページが表示される順序が変化します。 たとえば、Page1 という名前のページを 2 ページ目にするには、次の構文を使用します。
Page1.PageIndex = 1
"PageIndex/ページインデックス" プロパティは、ページのプロパティ シートで設計時に設定するほうが一般的です。 また、タブ コントロールの境界線を右クリックし、ショートカット メニューの [ページの順序] をクリックして、 ページの順序 を設定することもできます。
タブ コントロール ページのコントロールを参照する
タブ コントロールのページ上に配置するコントロールは、フォーム上のすべてのコントロールと同じコレクションのメンバーです。 この理由から、タブ コントロール ページ上の各コントロールには、同じフォーム上にある他のコントロールと重複しない名前を付ける必要があります。 タブ コントロールのないフォームのコントロールに同じ構文を使用して、タブ コントロール ページのコントロールを参照します。
Forms!Employees!HomePhone
フォーム上の各コントロールには独自の Controls コレクションがあるため、タブ コントロール上のコントロールをその Controls コレクションのメンバーとして参照することもできます。 たとえば次のコードは、[Employees] フォームのタブ コントロール上のすべてのコントロールを列挙 (一覧表示) します。
Sub ListTabControlControls()
Dim tabCtl As TabControl
Dim ctlCurrent As Control
On Error GoTo ErrorHandler
' Return reference to tab control on Employees form.
Set tabCtl = Forms!Employees!TabCtl0
' List all controls on the tab control in the Debug window.
For Each ctlCurrent In tabCtl
Debug.Print ctlCurrent.Name
Next ctlCurrent
Set tabCtl = Nothing
Set ctlCurrent = Nothing
Exit Sub
ErrorHandler:
MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
End Sub
さらに、タブ コントロール上の各ページには、その独自の Controls コレクションがあります。 ページの Controls コレクションを使うことによって、各ページ上のコントロールを参照できます。 次のコードは、[Employees] フォーム上のタブ コントロールの各ページにあるコントロールを列挙します。
Sub ListPageControls()
Dim tabCtl As TabControl
Dim pagCurrent As Page
Dim ctlCurrent As Control
Dim intPageNum As Integer
On Error GoTo ErrorHandler
' Return reference to tab control on Employees form.
Set tabCtl = Forms!Employees!TabCtl0
' List all controls for each page on the tab control in the
' Debug window.
For Each pagCurrent In tabCtl.Pages
intPageNum = intPageNum + 1
Debug.Print "Page " & intPageNum & " Controls:"
For Each ctlCurrent In pagCurrent.Controls
Debug.Print ctlCurrent.Name
Next ctlCurrent
Debug.Print
Next pagCurrent
Set tabCtl = Nothing
Set ctlCurrent = Nothing
Set pagCurrent = Nothing
Exit Sub
ErrorHandler:
MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
End Sub
サポートとフィードバック
Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示