|
その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
|
|