#577 コントロールが配置されたセクションを調べるには? VBA

フォームやレポートには、そのデザインに応じてさまざまな場所にコントロールを配置します。同じラベルコントロールであっても、フォームヘッダーセクションに配置することもあれば、詳細セクションに配置することもあります。

そのようなとき、VBAでそれぞれのコントロールのあるプロパティの値を取得すると、そのコントロールがどのセクションに配置されているかを調べることができます。

それによって、たとえば同じラベルコントロールであっても、「詳細セクションにあるラベルだけフォントのサイズを一括して変更する」といったことができます。もちろんそれだけならデザインビューで手作業でやってしまった方が早いですが、コントロールにはたくさんのプロパティがありますので、多くのプロパティを同時に変更したいようなとき、あるいはたくさんのフォームに対して同じような処理をしたいようなときにはVBAで処理すると楽です。


VBAを使ってあるコントロールが所属するセクションを取得するには、「Control」オブジェクトの「Section」プロパティの値を調べます。この値を組み込み定数と比較することで、「acHeaderならヘッダー」、「acDetailなら詳細」、「acFooterならフッター」というように判別することができます。

次の例では、「frmセクション調査」という名前のフォームに配置されたすべてのコントロールをループで取得し、所属するセクションで処理分岐し、セクションに応じて書式関連プロパティの変更を行っています。

Dim frm As Form
Dim ctl As Control

'対象フォームを設定
Set frm = Forms!frmセクション調査

'コントロールの一覧を取得するループ
For Each ctl In frm.Controls
  With ctl
    '所属するセクションで処理分岐
    Select Case .Section
      Case acHeader
        'フォームヘッダーの場合
        '背景色を非透明の赤に変更
        .BackStyle = 1
        .BackColor = vbRed
      Case acDetail
        '詳細セクションの場合
        'フォントサイズを20に変更
        .FontSize = 20
      Case acFooter
        'フォームフッターの場合
        'フォントを斜体に変更
        .FontItalic = True
    End Select
  End With
Next ctl


実行例:
実行前のフォームのデザイン

実行後のフォームのデザイン
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved