32 コントロール系 - 種類ごとにカンマ区切りでコントロール名を収集する

カレントデータベース内にあるフォーム名の一覧とともに、それぞれのフォームに配置されているコントロールの種類ごとにコントロール名を収集します。

ここでは複数のコントロール名をカンマ区切りで列挙します。また種類については「テキストボックス/コマンドボタン/サブフォーム/その他」の4つの分け方で収集します。
※コントロールの種類の区分けについては『特定の種類のコントロールだけを収集する』に記載の表を参照

  1. 「Database」オブジェクト「Container」オブジェクトを設定し、「Documents」コレクションの中から、For Each〜Nextステートメントでひとつずつフォーム情報を取り出し、「Document」オブジェクトの変数「doc」にセットしていきます。

  2. ここではコントロールの種類を4つに分け、それぞれの変数にカンマとともにコントロール名を”後ろに追加”していきます。そのため、前のフォームの情報が残らないよう、フォームごとにそれら4つの変数を初期化します。

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

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

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

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

  7. そのコントロールの種類を表す「ControlType」プロパティを調べ、Select Caseステートメントでその値に応じて処理を分岐します。

  8. その値が「acTextBox/テキストボックス」であれば、”テキストボックス”のコントロール名(「Name」プロパティの値)を格納するための文字列変数の”後ろに追加”します。

    カンマ区切りにするため、2つめ以降のコントロール名を追加する前に「,(カンマ)」を付加します。変数は長さゼロに初期化されているので、「Len(変数名) = 0」なら1つめのコントロール、「Len(変数名) > 0」なら2つめ以降と判別できます。IIf関数で仕分けして2つめ以降なら「,」を付けます。

  9. 同様のCase節による処理分岐で、他の3つの種類についてもそれぞれに対応する変数にコントロール名を追加していきます。

  10. 最後に、4つの変数の内容をイミディエイトウィンドウに出力します。

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

Sub Sample_4_07()
'種類ごとにカンマ区切りでコントロール名を収集する

  Dim dbs As Database
  Dim ctn As Container
  Dim doc As Document
  Dim ctl As Control
  Dim strFormName As String
  Dim strTextBoxs As String
  Dim strButtons As String
  Dim strSubForms As String
  Dim strOthers As String

  Set dbs = CurrentDb
  Set ctn = dbs.Containers!Forms
  For Each doc In ctn.Documents
    strTextBoxs = ""
    strButtons = ""
    strSubForms = ""
    strOthers = ""
    strFormName = doc.Name
    DoCmd.OpenForm strFormName, acDesign
    Debug.Print "■" & strFormName
    For Each ctl In Forms(strFormName).Controls
      With ctl
        Select Case .ControlType
          Case acTextBox
            strTextBoxs = strTextBoxs & IIf(Len(strTextBoxs) > 0, ",", "") & .Name
          Case acCommandButton
            strButtons = strButtons & IIf(Len(strButtons) > 0, ",", "") & .Name
          Case acSubform
            strSubForms = strSubForms & IIf(Len(strSubForms) > 0, ", ", "") & .Name
          Case Else
            strOthers = strOthers & IIf(Len(strOthers) > 0, ",", "") & .Name
        End Select
      End With
    Next ctl
    Debug.Print "テキストボックス:" & strTextBoxs
    Debug.Print "コマンドボタン:" & strButtons
    Debug.Print "サブフォーム:" & strSubForms
    Debug.Print "その他:" & strOthers
    Debug.Print "------------------"
    DoCmd.Close acForm, strFormName, acSaveNo
  Next doc

End Sub

実行例:
| Index | Prev | Next |



Copyright © T'sWare All rights reserved