- ベストアンサー
Excel2000 VBA修正のアドバイス
- Excel2000のVBAを使用して、ユーザーフォーム上のコントロールタイプと名前をリストで取得する方法を学んだが、ユーザーフォーム内の全てのコントロールを取得する方法がわからない。
- 修正方法を教えていただければ幸いです。
- Excel2000 VBA修正に関するアドバイスをお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
面白そうだったので遊んでいたら、こんなものができました。 自分のセンスの無さを少々恨みながら・・ Sub TESTFORM() Dim C As Control, MP As Page, MPC As Control Dim r As Integer, n As Integer Cells.ClearContents Range("A1:F1") = Array("No", "コントロール種類", "コントロール名", "ページ・タブ名", "ページ内コントロール種類", "ページ内コントロール名") r = 2: n = 1 For Each C In UserForm1.Controls If WorksheetFunction.CountIf(Columns("F"), C.Name) = 0 Then If TypeName(C) = "TabStrip" Then Cells(r, 1) = n Cells(r, 2) = TypeName(C) Cells(r, 3) = C.Name For i = 0 To C.Tabs.Count - 1 Cells(r, 4) = C.Tabs(i).Caption r = r + 1 Next ElseIf TypeName(C) = "MultiPage" Then Cells(r, 1) = n Cells(r, 2) = TypeName(C) For Each MP In C.Pages Cells(r, 3) = TypeName(MP) Cells(r, 4) = MP.Name For Each MPC In MP.Controls Cells(r, 5) = TypeName(MPC) Cells(r, 6) = MPC.Name r = r + 1 Next Next Else Cells(r, 1) = n Cells(r, 2) = TypeName(C) Cells(r, 3) = C.Name r = r + 1 End If n = n + 1 End If Next End Sub 肝は・・ ・タブストリップは各タブに「埋め込まれるコントロール」は無いので、各タブの名前だけ (恐らく、これ↑が > マルチページ( MultiPage)だけでなく、タブストリップ( TabStrip)があれば への回答になるかと。 「タブごとに」別のコントロールを埋め込む手段は無いような気がしますので。 連動して「表示・非表示」は可能ですが。) ・マルチページはページの名前と 「埋め込まれているコントロール」があるので、その種類と名前も持ってくる ・タブスプリットに重なっているモノも含め、単独(?)のコントロールは種類と名前 ・居た堪れなくなってCountIfに逃げていることT-T ・にもかかわらず、設置されたコントロール順に見ていくので、 マルチページ内に「移動した」コントロールは2回出てきてしまい、 実は逃げ切れていないこと(T-T) でしょうか。
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
こんにちは。 こんなカンジ。 Sub macro1() Dim p As Page Dim c As Control Dim r As Long Dim n As Long Load UserForm1 Range("A1:D1") = Array("Tab name", "No", "Name", "Type") For Each p In UserForm1.MultiPage1.Pages n = 1 For Each c In p.Controls r = Range("A65536").End(xlUp).Offset(1).Row Cells(r, "A") = p.Name Cells(r, "B") = n Cells(r, "C") = c.Name Cells(r, "D") = TypeName(c) n = n + 1 Next Next End Sub
補足
回答ありがとうございます。 出来れば、マルチページ( MultiPage)だけでなく、タブストリップ( TabStrip)があれば、 それに対応するようにして、もし両方(マルチページとタブストリップ)ともない場合は、 私が質問で記載していた処理をするような形で、修正したものを教えていただけないでしょうか ご無理言ってすみません。
お礼
うまくいきました。ありがとうございました。 ご教授いただいた記述をしっかりと勉強させていただきます。