26 コントロール系 - 各フォームに含まれるコントロールの数を収集する

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

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

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

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

  5. さらに、そのフォーム内に配置されているすべてのコントロールのコレクションである「Controls」の、その数を表す「Count」プロパティの値をイミディエイトウィンドウに出力します。

    ※このCountプロパティの値はFor〜Nextステートメントのカウンタの上限値として利用することもできます。たとえば「For i = 0 To Forms(strFormName).Controls.Count - 1」というループを形成し、その中で「Forms(strFormName).Controls(i).Name」とすることで、そのフォーム内のすべてのコントロール名を取り出すことができます。

  6. そのフォームを閉じます。
    ここではデータ収集のみでデザイン変更はありませんので、引数に「acSaveNo」を指定することで意図的に変更を保存せずに閉じます。

Sub Sample_4_01()
'各フォームに含まれるコントロールの数を収集する

  Dim dbs As Database
  Dim ctn As Container
  Dim doc As Document
  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,
    Debug.Print Forms(strFormName).Controls.Count
    DoCmd.Close acForm, strFormName, acSaveNo
  Next doc

End Sub

実行例:


| Index | Prev | Next |



Copyright © T'sWare All rights reserved