|
その3 シート上アクティブXコントロールのマルチページとリストボックス
・シート上にマルチページの作るには。
コントロールツールボックスのコントロールの選択の中から、「Micrsoft Forms 2.0 MultiPage」を選んで作成。
・マルチページの上にリストボックスボタンを作るには。
デザインモードにしてから、
マルチページを右クリック → マルチページオブジェクト → 編集
で、出てきたツールボックスから作る。
この辺りはフレームjと同じです。
・ページの増減、タブ名の変更は、タブを右クリックすれば編集できます。
---------------------------------
マルチページのページ枚数が4枚、各ページにリストボックスがあったとして。
尚、コードの書き方に With〜End With 使ったり使わなかったり、
シートから記述してあったり無かったり、、とか、
リスト項目の作成時に、1つのFor..Nextステートメントの中に「AddItem」、「配列」、「RowSource」
などごちゃ混ぜに入れてますが、色々なパターンを紹介したいが、区分けして書くのが面倒だったので、節操無くごちゃ混ぜにし、しかもメモ書き状態のままで色々載せてみます。
全標準モジュールから、シートモジュールで使える??
余計に解りづらかったらすみません。
注).Pages(i).Controls(0)
の場合、ページ番号やリストボックスのControls番号が一致していないとエラーになります。
マルチページに作ったオブジェクトの種類なども注意してください。
・現在選択されているページ番号の取得
Sub 選択されているページ()
PGNo = Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Value
MsgBox Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(PGNo).Caption & vbLf & _
"選択ページ " & PGNo + 1 & vbLf & _
".Value は、" & PGNo
End Sub
・2ページ目のリストボックスの場合
Sub リストボックスリスト作成1()
Dim OBJ As Object
Application.EnableEvents = False
For Each OBJ In Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(1).Controls
If OBJ.Name = "ListBox2" Then
OBJ.List = Worksheets("Sheet1").Range("C1:C5").Value
Exit For
End If
Next
Application.EnableEvents = True
End Sub
・全ページ(4ページ)の場合
Sub リストボックスリスト作成2()
'Pagesは、0から
Dim TB() As String, TB2() As String
For i = 0 To Sheets("Sheet1").OLEObjects("MultiPage1").Object.Pages.Count - 1
Select Case i
Case 0
'.Value使用
Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(i).Controls(0).List = Range("A1:A10").Value
Case 1
'AddItem
For ii = 1 To 10
Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(i).Controls(0).AddItem Cells(ii, 2).Value
Next
Case 2
'配列使用(1次元、2次元可)
'ReDim TB(1 To 10, 1 To 1)
ReDim TB2(1 To 10)
For ii = 1 To 10
'TB(ii, 1) = Cells(ii, "C").Value
TB2(ii) = Cells(ii, "C").Value
Next
Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(i).Controls(0).List = TB2
Erase TB2
Case 3
'RowSource使用
Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(i).Controls(0).RowSource = "Sheet1!A15:A20"
End Select
Next
End Sub
・リストボックス内容消去
Sub 全ページListBox消し()
With Worksheets("Sheet1").OLEObjects("MultiPage1").Object
For i = 0 To .Pages.Count - 1
'ListBoxのIndexが、全て0ならこれで良い。
'.Pages(i).Controls(0).Object.Clear
For ii = 0 To .Pages(i).Controls.Count - 1
If TypeName(.Pages(i).Controls(ii)) = "ListBox" Then
'↓ RowSource設定されていた場合を考えて入れた。
.Pages(i).Controls(ii).RowSource = vbNullString
'注)Clearは、RowSourceで設定されていた場合は、エラーになる。
.Pages(i).Controls(ii).Object.Clear
End If
Next
Next
End With
End Sub
・コンボボックスのリスト作成
Sub コンボボックスリスト作成直書き()
'配列仕様(注)Pagesは、0から
Dim CbTb As Variant
CbTb = Array("Combo_01", "Combo_02", "Combo_03", "Combo_04", "Combo_05")
Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(0).Controls("ComboBox1").Object.Value = ""
Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(0).Controls("ComboBox1").Object.List = CbTb
'X Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(0).Controls("ComboBox1").Object.FontSize = "9pt MS Pゴシック"
Erase CbTb
Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(2).Controls("ComboBox2").Object.Value = ""
Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(2).Controls("ComboBox2").RowSource = "Sheet1!B14:B20"
End Sub
・コンボボックス内容の消去
Sub コンボボックスリスト消し直書き()
'(注)Pagesは、0から、.Objectは、無くても動いた。
Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(0).Controls("ComboBox1").Value = ""
Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(0).Controls("ComboBox1").RowSource = ""
Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(0).Controls("ComboBox1").Clear
Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(2).Controls("ComboBox2").Object.Value = ""
Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(2).Controls("ComboBox2").RowSource = ""
Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(2).Controls("ComboBox2").Object.Clear
PGNo = Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Value
MsgBox "選択ページ " & PGNo + 1 & vbLf & _
".Value は、" & PGNo & vbLf & _
Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(PGNo).Caption
End Sub
・選択されたオプションボタン名の取得
Sub オプションボタン取得()
'2Pege (注)Pagesは、0から
Dim Flg As Boolean
With Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(2)
For i = 0 To .Controls.Count - 1
If TypeName(.Controls(i)) = "OptionButton" Then
rtgh = .Controls(i).Value
If .Controls(i).Value Then
No = i
Flg = True
End If
End If
Next
If Flg Then
'i を使うなら、Forで、1プラスされるから -1する。
MsgBox .Caption & vbLf & _
.Controls(No).Caption
Else
MsgBox "OptionButtonチェック無。"
End If
End With
End Sub
・テキストぼっクの内容取得と消去
Sub テキストボックス()
With Worksheets("Sheet1").OLEObjects("MultiPage1").Object.Pages(0)
MsgBox .Controls("TextBox1").Object.Value & vbLf & _
"メッセージボックス閉じた後消します。"
.Controls("TextBox1").Object.Value = ""
End With
End Sub
全然まとまってませんが、大体こんな感じだということでお願いします。
フレーム、マルチページ上に作ったCommandButtonのコードは、わかりません。
クリックイベントも無いようですし、マクロ登録できるのかも解りませんでした。
|
|