Page 124 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼テキストボックス等の名前の一覧表示 haru 02/8/28(水) 10:56 ┗Re:テキストボックス等の名前の一覧表示 りん 02/8/28(水) 11:16 ┣Re:テキストボックス等の名前の一覧表示 haru 02/8/28(水) 11:40 ┃ ┗Re:テキストボックス等の名前の一覧表示 りん 02/8/28(水) 12:04 ┗Re:テキストボックス等の名前の一覧表示 haru 02/8/28(水) 11:57 ┗Re:テキストボックス等の名前の一覧表示 りん 02/8/28(水) 13:00 ┣Re:テキストボックス等の名前の一覧表示 haru 02/8/28(水) 16:15 ┗Re:テキストボックス等の名前の一覧表示 haru 02/9/24(火) 13:11 ─────────────────────────────────────── ■題名 : テキストボックス等の名前の一覧表示 ■名前 : haru ■日付 : 02/8/28(水) 10:56 -------------------------------------------------------------------------
プロパティウィンドにテキストボックス等の名前が表示されます が、フレーム内のものは表示されません。 全てのものを知りたいのですが、どうすれば一覧表示できますか? 教えて下さい。 よろしくお願いします。 |
haru さん、こんにちわ。 > 全てのものを知りたいのですが、どうすれば一覧表示できますか? > 教えて下さい。 プロパティウィンドウは「子」オブジェクトまでしか表示されません。 親がフォームの場合は、フレームの中のテキストボックスはフレームの「子」になり、フォームからみて「孫」にあたるために対象外になるので、フレームを親とした場合にのみ表示されます。 こういう意味ではないと思いますが、一覧を取得するコード。 Sub test() Dim Obj As Control, msg$ msg$ = msg$ + "Control" + vbTab + vbTab + "Parent" msg$ = msg$ + vbCrLf + String(40, "=") For Each Obj In UserForm1.Controls msg$ = msg$ + vbCrLf + Obj.Name + vbTab + vbTab + Obj.Parent.Name Next MsgBox msg$, vbInformation, "Controls Information" End Sub |
▼りん さん: こんにちわ。 >> 全てのものを知りたいのですが、どうすれば一覧表示できますか? >こういう意味ではないと思いますが、一覧を取得するコード。 >Sub test() > Dim Obj As Control, msg$ > msg$ = msg$ + "Control" + vbTab + vbTab + "Parent" > msg$ = msg$ + vbCrLf + String(40, "=") > For Each Obj In UserForm1.Controls > msg$ = msg$ + vbCrLf + Obj.Name + vbTab + vbTab + Obj.Parent.Name > Next > MsgBox msg$, vbInformation, "Controls Information" >End Sub ありがとうございます。うまくいきました。 ところで、これを実際実行してみたら、数が多すぎて画面から下 側がはみ出していて見えません。 2列に表示することはできますか? できなければ、新シートに書き出して表示するしかないでしょう か? よろしくお願いします。 |
haru さん、こんにちわ。 > 新シートに書き出して表示するしかないでしょうか? そのほうがよさそうですね。 Sub test() Dim Obj As Control Dim II%, Cmax% Cmax% = UserForm1.Controls.Count ' If Cmax% > 0 Then ReDim dt(0 To Cmax%, 1 To 2) dt(0, 1) = "コントロール" dt(0, 2) = "親(所属)" II% = 0 For Each Obj In UserForm1.Controls II% = II% + 1 dt(II%, 1) = Obj.Name dt(II%, 2) = Obj.Parent.Name Next '結果表示用ブック追加 With Workbooks.Add.Worksheets(1) With .Range(.Cells(1, 1), .Cells(1 + Cmax%, 2)) .Value = dt() '罫線 With .Borders .LineStyle = xlContinuous .Weight = xlThin End With .ColumnWidth = 15 End With '↓閉じるときに確認が出ずに破棄できるので設定 .Parent.Saved = True End With Erase dt Else MsgBox "コントロールがありません", vbExclamation End If End Sub こんな感じです。 UserForm1がないと、コンパイル時にエラーになります。 |
▼りん さん: こんにちわ。もう一つ、お願いします。 >こういう意味ではないと思いますが、一覧を取得するコード。 このコードを別のブックで使いたいのですが、どこを変更すれば 良いですか? 初歩的な質問でしたら、すみません。 よろしくお願いします。 |
haru さん、こんにちわ。 >>こういう意味ではないと思いますが、一覧を取得するコード。 > このコードを別のブックで使いたいのですが、どこを変更すれば >良いですか? 違うブックの場合はUserForm1と指定できないので、VBComponent(s)を使います。 VBComponent.Type = 3 というのはこのコンポーネントがユーザーフォームという意味です。 Sub test() Dim vbcs As Object, vbc As Object, ctl As Object Dim wb As Workbook, ws As Worksheet Dim RR& ' Set wb = ActiveWorkbook 'チェックの対象は現在表示しているブックです。 Set vbcs = wb.VBProject.VBComponents Set ws = Workbooks.Add.Worksheets(1) ws.Columns.ColumnWidth = 15 '表題いろいろ RR& = 1 ws.Cells(RR&, 1).Value = "ブック名" ws.Cells(RR&, 2).Value = wb.Name RR& = RR& + 1 ws.Cells(RR&, 1).Value = "コントロール" ws.Cells(RR&, 2).Value = "親(所属)" ws.Cells(RR&, 3).Value = "フォーム名" ' For Each vbc In vbcs If vbc.Type = 3 Then vbc.DesignerWindow.Visible = True For Each ctl In vbc.Designer.Controls RR& = RR& + 1 ws.Cells(RR&, 1).Value = ctl.Name ws.Cells(RR&, 2).Value = ctl.Parent.Name ws.Cells(RR&, 3).Value = vbc.Name Next vbc.DesignerWindow.Visible = False End If Next ws.Parent.Saved = True Set ws = Nothing: Set wb = Nothing Set vbcs = Nothing End Sub こんな感じです。 |
▼りん さん: こんにちわ。 2個ともうまくいきました。 ありがとうございます。 |
▼りん さん: こんにちわ。 別のブックのコマンドボタンから Private Sub commandbutton1_Click() Application.Run ("プロパティウィンド.xls!test") End Sub として、実行すると、 >Sub test() > Dim vbcs As Object, vbc As Object, ctl As Object > Dim wb As Workbook, ws As Worksheet > Dim RR& > ' > Set wb = ActiveWorkbook 'チェックの対象は現在表示しているブックです。 > Set vbcs = wb.VBProject.VBComponents > Set ws = Workbooks.Add.Worksheets(1) > ws.Columns.ColumnWidth = 15 > '表題いろいろ > RR& = 1 > ws.Cells(RR&, 1).Value = "ブック名" > ws.Cells(RR&, 2).Value = wb.Name > RR& = RR& + 1 > ws.Cells(RR&, 1).Value = "コントロール" > ws.Cells(RR&, 2).Value = "親(所属)" > ws.Cells(RR&, 3).Value = "フォーム名" > ' > For Each vbc In vbcs > If vbc.Type = 3 Then > vbc.DesignerWindow.Visible = True この行で終了してしまいます。 何か良い方法を教えていただきたいのですが。 よろしくお願いします。 > For Each ctl In vbc.Designer.Controls > RR& = RR& + 1 > ws.Cells(RR&, 1).Value = ctl.Name > ws.Cells(RR&, 2).Value = ctl.Parent.Name > ws.Cells(RR&, 3).Value = vbc.Name > Next > vbc.DesignerWindow.Visible = False > End If > Next > ws.Parent.Saved = True > Set ws = Nothing: Set wb = Nothing > Set vbcs = Nothing >End Sub F5を押して、実行すればうまく行きます。 |