34 コントロール系 - テキストボックスの前景色/背景色を収集する

カレントデータベース内にあるすべてのフォームとその中のすべてのコントロールを探索し、テキストボックスコントロールであるものについて、その前景色と背景色プロパティの値を収集します。
  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/テキストボックス」)であれば、下記の3つのプロパティ値をイミディエイトウィンドウに出力します。
    • Name → 名前
    • ForeColor → 前景色
    • BackColor → 背景色

    ※プロパティシート上で16進数で色を指定している場合、あるいはテーマカラーから選択している場合でも、VBAで取得されるプロパティ値は長整数値となります。16進数表記にするにはそれを換算する必要があります(注1)。またテーマカラーの種類や明るさなどは別のプロパティを参照する必要があります(注2)。

    (注1) 参考:「RGB値をRとGとBの16進に分割変換する方法」「16進数表記でコントロールの色を設定するには?」
    (注2) 「ForeThemeColorIndex」、「ForeTint」、「BackThemeColorIndex」、「BackTint」などのプロパティ

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

Sub Sample_4_09()
'テキストボックスの前景色/背景色を収集する

  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,
          Debug.Print .ForeColor,
          Debug.Print .BackColor
        End If
      End With
    Next ctl
    Debug.Print "------------------"
    DoCmd.Close acForm, strFormName, acSaveNo
  Next doc

End Sub

実行例:


| Index | Prev | Next |



Copyright © T'sWare All rights reserved