#03 フォームのコントロール一覧を取得する

#02「テーブルオブジェクトを解剖」ではテーブル内のフィールド情報を調べてみました。複数のフィールドが集まってテーブルが構成されているのと同様に、フォームも複数のコントロールが集まって成り立っています。この親(=オブジェクト)とその下位に属する複数の子の集まり(=コレクション)、さらにその中の1つの子(これもまたオブジェクト)の考え方をテーブルの場合と同様にフォームに適用して、フォーム内のコントロール一覧を取得してみましょう。
 
ず、特定のフォームのコントロール名の一覧を列挙してみましょう。それには次のコードを実行します。 

  Dim dbs As Database
  Dim frm As Form
  Dim ctl As Control

  Set dbs = CurrentDb

  DoCmd.OpenForm "フォーム1",  _
    acDesign, , , , acHidden

  Set frm = Forms!フォーム1

  For Each ctl In frm.Controls
    Debug.Print ctl.Name
  Next ctl

  DoCmd.Close acForm, "フォーム1", acSaveNo


ここで、 Forms!XXXXXX の部分はデータベースに含まれるフォーム(実際には現在開かれているフォーム)の集まりを示します。そして Set frm = Forms!フォーム1 でその集まりの中から「フォーム1」を取り出して Form オブジェクトを示す変数 frm にセットしています。

同様に For Each ctl In frm.Controls では、そのフォームに属するコントロールの集まりから順番にコントロールを取り出しています。 

なお、フォームやレポートでコントロール一覧を取得するためには、そのフォームやレポートがデザインビューあるいはフォームビューなどで開いている必要があります。DoCmd.OpenForm と DoCmd.Close はそのための操作です。すでに開いている場合などにはこれらの操作は要りません。 

'sKitの「オブジェクトツリー表示」ツールではコントロール名の表示までですが、ここではさらにその下位のコントロールのプロパティを取得してみましょう。

コントロールの場合、その種類によってコントロールの持つプロパティには大きな違いがあります。例えばリストボックスコントロールの[値集合ソース]プロパティはテキストボックスコントロールには存在しませんし、テキストボックスコントロールの[書式]プロパティがすべてのコントロールにあるわけではありません。

『あるコントロールの書式プロパティを取得したい』というように、目的のプロパティがはっきりしている場合には コントロール名.プロパティ名Controlオブジェクト.プロパティ名 の構文で値を取得できますが、ここではコントロールの種類に関係なくプロパティを列挙するように、[Properties]コレクションを使ってみましょう。 

右の例では"商品コード"コントロールに対してプロパティの列挙を行っています。


  Dim dbs As Database
  Dim frm As Form
  Dim ctl As Control
  Dim prp As Property

  DoCmd.OpenForm "フォーム1", _
    acDesign, , , , acHidden

  Set frm = Forms!フォーム1
  Set ctl = frm!商品コード

  'デザインビューでは取得できないプロパティも
  'あるので、エラーは無視する
  On Error Resume Next

  For Each prp In ctl.Properties
    Debug.Print prp.Name, prp.Value
  Next prp

  DoCmd.Close acForm, "フォーム1", acSaveNo

| Index | Prev | Next |

 

Copyright © T'sWare All rights reserved