31 コントロール系 - 特定の種類のコントロールだけを収集する

カレントデータベース内にあるすべてのフォームとその中のすべてのコントロールを探索し、特定の種類のコントロールだけを収集します。
  1. 「Database」オブジェクト「Container」オブジェクトを設定し、「Documents」コレクションの中から、For Each〜Nextステートメントでひとつずつフォーム情報を取り出し、「Document」オブジェクトの変数「doc」にセットしていきます。

  2. 取り出されたひとつのフォーム情報のうち、フォーム名である「Name」プロパティの値を、ここではそれを何度か使用するため、いったん変数「strFormName」にセットします。

  3. フォーム内のオブジェクトを参照するので、そのフォームを”デザインビュー”(引数に「acDesign」を指定)で開きます。

  4. まずフォーム名をイミディエイトウィンドウに出力します。

  5. そのフォーム内に配置されているすべてのコントロールのコレクションである「Controls」の中から、For Each〜Nextステートメントでひとつずつコントロール情報を取り出し、「Control」オブジェクトの変数「ctl」にセットしていきます。

  6. 取り出されたひとつのコントロール情報のうち、そのコントロールの種類を表す「ControlType」プロパティ(下表参照)の値を調べます。

  7. それが特定の値(ここでは「acTextBox/テキストボックス」または「acLabel/ラベル」)であれば、コントロール名(「Name」プロパティの値)とその種類をイミディエイトウィンドウに出力します。

  8. そのフォームを閉じます。
    ここではデータ収集のみでデザイン変更はありませんので、引数に「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

実行例:


| Index | Prev | Next |



Copyright © T'sWare All rights reserved