過去ログ

                                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
 -------------------------------------------------------------------------
    プロパティウィンドにテキストボックス等の名前が表示されます
が、フレーム内のものは表示されません。
 全てのものを知りたいのですが、どうすれば一覧表示できますか?
 教えて下さい。
 よろしくお願いします。
 ───────────────────────────────────────  ■題名 : Re:テキストボックス等の名前の一覧表示  ■名前 : りん <rin_doggie@hotmail.com>  ■日付 : 02/8/28(水) 11:16  -------------------------------------------------------------------------
   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
 ───────────────────────────────────────  ■題名 : Re:テキストボックス等の名前の一覧表示  ■名前 : haru  ■日付 : 02/8/28(水) 11:40  -------------------------------------------------------------------------
   ▼りん さん:
こんにちわ。

>> 全てのものを知りたいのですが、どうすれば一覧表示できますか?
>こういう意味ではないと思いますが、一覧を取得するコード。

>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列に表示することはできますか?
 できなければ、新シートに書き出して表示するしかないでしょう
か?
 よろしくお願いします。
 ───────────────────────────────────────  ■題名 : Re:テキストボックス等の名前の一覧表示  ■名前 : りん <rin_doggie@hotmail.com>  ■日付 : 02/8/28(水) 12:04  -------------------------------------------------------------------------
   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がないと、コンパイル時にエラーになります。
 ───────────────────────────────────────  ■題名 : Re:テキストボックス等の名前の一覧表示  ■名前 : haru  ■日付 : 02/8/28(水) 11:57  -------------------------------------------------------------------------
   ▼りん さん:
こんにちわ。もう一つ、お願いします。

>こういう意味ではないと思いますが、一覧を取得するコード。
 このコードを別のブックで使いたいのですが、どこを変更すれば
良いですか?
 初歩的な質問でしたら、すみません。
 よろしくお願いします。
 ───────────────────────────────────────  ■題名 : Re:テキストボックス等の名前の一覧表示  ■名前 : りん <rin_doggie@hotmail.com>  ■日付 : 02/8/28(水) 13:00  -------------------------------------------------------------------------
   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

こんな感じです。
 ───────────────────────────────────────  ■題名 : Re:テキストボックス等の名前の一覧表示  ■名前 : haru  ■日付 : 02/8/28(水) 16:15  -------------------------------------------------------------------------
   ▼りん さん:
こんにちわ。

 2個ともうまくいきました。
 ありがとうございます。
 ───────────────────────────────────────  ■題名 : Re:テキストボックス等の名前の一覧表示  ■名前 : haru  ■日付 : 02/9/24(火) 13:11  -------------------------------------------------------------------------
   ▼りん さん:
こんにちわ。

 別のブックのコマンドボタンから

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を押して、実行すればうまく行きます。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 124