| 
    
     |  | その2 シート上アクティブXコントロールのタブストリップ(TabStrip) 
 ・シート上にタブストリップの作るには。
 コントロールツールボックスのコントロールの選択の中から、「Micrsoft Forms 2.0 TabStrip」を選んで作成。
 
 ・タブストリップのページが複数合っても、配置した1つのコントロールを共通で使います。
 例えば、リストボックスを1つ配置した場合、ページを切り替えても、同じリストボックスが表示されたままです。
 
 ・不可解
 マクロでタブ名を変更後、シートを切り替えると、なぜかブック起動時の状態に戻ってしまう。
 マウスポインタをタブストリップ上に持っていくと、変更した状態になる。
 ブック起動後は、前回保存した時の状態のままだが....。
 
 by Win98se & EXCEL2000 SR-1
 Win2000SP3 & EXCEL97 SR-2
 
 ----------------------------------
 タブストリップ上にリストボックスを1つ作ったとして。
 1,2は、シートモジュール、標準モジュールどちらからでも変更できます。
 
 ○タブ名の変更
 
 1、
 Sub タブ名変更()
 With Sheets("Sheet1").TabStrip1
 For i = 0 To .Tabs.Count - 1
 .Tabs(i).Caption = "タブ" & (i + 1)
 Next
 'ここから下、タブ名変更がすぐに反映されない為に必要。
 'PCスペック、エクセルバージョン等による?
 If Val(Application.Version) = 8 Then
 ActiveCell.Activate '97だと無いとエラーになる。
 End If         '2000で、エラーになるか未確認の為、97専用にしました。
 .Activate
 End With
 ActiveCell.Activate
 DoEvents
 End Sub
 
 2、
 Sub タブ名変更OLE版()
 With Worksheets("Sheet1").OLEObjects("TabStrip1")
 For i = 0 To .Object.Tabs.Count - 1
 .Object.Tabs(i).Caption = "OLE" & (i + 1)
 Next
 'ここから下、タブ名変更がすぐに反映されない為に必要。
 'PCスペック、エクセルバージョン等による?
 If Val(Application.Version) = 8 Then
 ActiveCell.Activate '97だと無いとエラーになる。
 End If         '2000で、エラーになるか未確認の為、97専用にしました。
 .Activate
 End With
 ActiveCell.Activate
 DoEvents
 End Sub
 
 3、
 シートモジュールに書く場合、Worksheets("Sheet1")等は、省いても可。
 
 Private Sub CommandButton1_Click()
 TabNm = Array("Tab1", "Tab2", "Tab3")
 With TabStrip1
 For i = 0 To .Tabs.Count - 1
 .Tabs(i).Caption = TabNm(i)
 Next
 'ここから下、タブ名変更がすぐに反映されない為に必要。
 'PCスペック、エクセルバージョン等による?
 If Val(Application.Version) = 8 Then
 ActiveCell.Activate '97だと無いとエラーになる。
 End If         '2000で、エラーになるか未確認の為、97専用にしました。
 .Activate
 End With
 ActiveCell.Activate
 DoEvents
 End Sub
 
 
 ○タブ上リストボックスのリスト作成
 タブ切り替え時にリスト内容が変わるようにする為には、
 1つのリストボックスの内容を切り替え時に都度書き換えます。
 注)リストボックスの内容とリストボックスの高さが合わない場合、
 勝手にリストボックスサイズが、縮小されてしまうのを防ぐ為に
 ListBoxの「IntegralHeightプロパティ」を、Falseにしておいた方が良いです。
 
 タブが3つあったとして。
 
 Private Sub TabStrip1_Change()
 If TabStrip1.Value = 0 Then
 CelAd = "A1:A10"
 ElseIf TabStrip1.Value = 1 Then
 CelAd = "B1:B10"
 Else
 CelAd = "C1:C10"
 End If
 ListBox1.List = Range(CelAd).Value
 End Sub
 
 配列とAddItem の使用(タブは2つとして)
 
 Private Sub TabStrip1_Change()
 Dim ListTB As Variant
 ListTB = Array("配列0", "配列1", "配列2", "配列3", "配列4", "配列5")
 Sheets("Sheet1").ListBox1.Clear
 If TabStrip1.Value = 0 Then
 Sheets("Sheet1").ListBox1.List = ListTB
 Erase ListTB
 Else
 For i = 0 To 8
 Sheets("Sheet1").ListBox1.AddItem "AddItem" & i
 Next
 End If
 End Sub
 
 
 ○リストボックス選択項目抽出
 通常の取り出し方で良いようです。
 
 1、
 Private Sub CommandButton1_Click()
 With ListBox1
 If .ListIndex >= 0 Then
 MsgBox .List(.ListIndex)
 Else
 MsgBox "リストボックス項目が選択されてません。"
 End If
 End With
 End Sub
 
 2、OLE版
 Sub リストボックス選択項目抽出OLE版()
 With Worksheets("Sheet1").OLEObjects("ListBox1").Object
 If .ListIndex >= 0 Then
 MsgBox .List(.ListIndex)
 Else
 MsgBox "リストボックス項目が選択されてません。"
 End If
 End With
 End Sub
 
 |  |