• ベストアンサー

フォーム上の全てのコントロールを取得したい

フォーム上の全てのコントロールを取得したいです。 (サブフォームも含め) 自分なりにVBAで考えてみたのがこれです。 Sub test() Dim 数 As Long For Each 数 In Form_フォーム1.Controls.Count ’Debug.Print ? End If Next End Sub でもこれだけでもデバックしてみると 「コンハ゜イルエラー for Eachは、コレクション オブジェクトまたは配列でのみ繰り返しを実行します。」 となります。 答えを教えてください! よろしくお願いします。 (アクセス2003です)

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

n-junです。 >ただなぜ「Controls.Count - 1」とマイナス1になるのでしょう?(不思議です) インデックスが0から始まるからでは? コントロールが5個あれば、0~4までの”5個”と言う感じで。

rieury
質問者

お礼

なるほど!納得しました!再度ありがとうございます。

その他の回答 (2)

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.2

以下の方法がイメージしやすいかも? (自フォームのコントロールを取得)   Dim ctl As Control   For Each ctl In Me.Controls     Debug.Print ctl.Name   Next   For Each ctl In Me.FSUB.Form.Controls '☆1     Debug.Print ctl.Name   Next ※ ☆1での FSUB は、自フォームへ配置したサブフォームコントロールの名前です。 (☆1のところは、サブフォーム内のコントロールを取得)

rieury
質問者

お礼

見事こちらでもできました! ありがとうございます。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

Sub try() Dim i As Integer For i = 0 To Form_フォーム1.Controls.Count - 1 Debug.Print Form_フォーム1.Controls.Item(i).Name Next End Sub AccessVBAは初めてなので、的はずれでしたらごめんなさい。

rieury
質問者

お礼

見事できました!ありがとうございます。 ただなぜ「Controls.Count - 1」とマイナス1になるのでしょう?(不思議です)