まず、特定のフォームのコントロール名の一覧を列挙してみましょう。それには次のコードを実行します。
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 はそのための操作です。すでに開いている場合などにはこれらの操作は要りません。
|
T'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
|