Share via


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 のサポートおよびフィードバックを参照してください。