カレントデータベース内にあるすべてのフォームとその中のすべてのコントロールを探索し、特定の種類のコントロールだけを収集します。
- 「Database」オブジェクトや「Container」オブジェクトを設定し、「Documents」コレクションの中から、For Each〜Nextステートメントでひとつずつフォーム情報を取り出し、「Document」オブジェクトの変数「doc」にセットしていきます。
- 取り出されたひとつのフォーム情報のうち、フォーム名である「Name」プロパティの値を、ここではそれを何度か使用するため、いったん変数「strFormName」にセットします。
- フォーム内のオブジェクトを参照するので、そのフォームを”デザインビュー”(引数に「acDesign」を指定)で開きます。
- まずフォーム名をイミディエイトウィンドウに出力します。
- そのフォーム内に配置されているすべてのコントロールのコレクションである「Controls」の中から、For Each〜Nextステートメントでひとつずつコントロール情報を取り出し、「Control」オブジェクトの変数「ctl」にセットしていきます。
- 取り出されたひとつのコントロール情報のうち、そのコントロールの種類を表す「ControlType」プロパティ(下表参照)の値を調べます。
- それが特定の値(ここでは「acTextBox/テキストボックス」または「acLabel/ラベル」)であれば、コントロール名(「Name」プロパティの値)とその種類をイミディエイトウィンドウに出力します。
- そのフォームを閉じます。
ここではデータ収集のみでデザイン変更はありませんので、引数に「acSaveNo」を指定することで意図的に変更を保存せずに閉じます。
Sub Sample_4_06()
'特定の種類のコントロールだけを収集する
Dim dbs As Database
Dim ctn As Container
Dim doc As Document
Dim ctl As Control
Dim strFormName As String
Set dbs = CurrentDb
Set ctn = dbs.Containers!Forms
For Each doc In ctn.Documents
strFormName = doc.Name
DoCmd.OpenForm strFormName, acDesign
Debug.Print "■" & strFormName
For Each ctl In Forms(strFormName).Controls
With ctl
If .ControlType = acTextBox Then
Debug.Print .Name & "(テキストボックス)"
ElseIf .ControlType = acLabel Then
Debug.Print .Name & "(ラベル)"
End If
End With
Next ctl
Debug.Print "------------------"
DoCmd.Close acForm, strFormName, acSaveNo
Next doc
End Sub
■主なコントロールの種類とControlTypeの組み込み定数
コントロールの種類 |
組み込み定数 |
ラベル |
acLabel |
テキストボックス |
acTextBox |
コマンドボタン |
acCommandButton |
コンボボックス |
acComboBox |
リストボックス |
acListBox |
チェックボックス |
acCheckBox |
オプションボタン |
acOptionButton |
トグルボタン |
acToggleButton |
オプショングループ |
acOptionGroup |
サブフォーム |
acSubform |
タブ |
acTabCtl |
ページ |
acPage |
イメージ |
acImage |
直線 |
acLine |
四角形 |
acRectangle |
改ページ |
acPageBreak |
連結オブジェクトフレーム |
acBoundObjectFrame |
非連結オブジェクトフレーム |
acObjectFrame |
ActiveXコントロール |
acCustomControl |
実行例:
|