• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:excel2000 vba 修正のアドバイス)

Excel2000 VBA修正のアドバイス

このQ&Aのポイント
  • Excel2000のVBAを使用して、ユーザーフォーム上のコントロールタイプと名前をリストで取得する方法を学んだが、ユーザーフォーム内の全てのコントロールを取得する方法がわからない。
  • 修正方法を教えていただければ幸いです。
  • Excel2000 VBA修正に関するアドバイスをお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.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) でしょうか。

puyopa
質問者

お礼

うまくいきました。ありがとうございました。 ご教授いただいた記述をしっかりと勉強させていただきます。

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

こんにちは。 こんなカンジ。 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

puyopa
質問者

補足

回答ありがとうございます。 出来れば、マルチページ( MultiPage)だけでなく、タブストリップ( TabStrip)があれば、 それに対応するようにして、もし両方(マルチページとタブストリップ)ともない場合は、 私が質問で記載していた処理をするような形で、修正したものを教えていただけないでしょうか ご無理言ってすみません。

関連するQ&A

専門家に質問してみよう