#684 Yes/No型フィールドをチェックボックス表示でテーブルに追加するには? テーブル、VBA

新規のテーブルを作ってさらにそこにフィールドを追加する、あるいは既存のテーブルに新規のフィールドを追加するといった処理をVBAのプログラムから行いたいといった場合、フィールド構造を決める基本的な属性、たとえばフィールド名やテキスト型のフィールドサイズ、インデックスなどについては、一般的なSQL文を発行することで処理することができます(あるいはデータ定義クエリを発行することでもできます)。

一方、Access固有の属性(プロパティ)、たとえば書式や入力規則・エラーメッセージなどを設定するためには、VBAでTableDefオブジェクトやFieldオブジェクトを操作する必要があります。

さらに、Accessではそれらのプロパティは「標準」「ルックアップ」というグループに分けられており、後者では、テキスト型であれば「テキストボックス」や「コンボボックス」など、Yes/No型であれば「テキストボックス」や「チェックボックス」など、データシートビューで表示したときの外観的な表示の仕方である「表示コントロール」を設定することもできます。


その表示コントロールについては、プログラムでフィールドを追加しただけの場合(下記の例)、Yes/No型でも”テキストボックス”に設定されてしまいます(プログラムを使わず手操作でフィールド追加した場合は”チェックボックス”になるのですが....)。

■フィールド追加だけ行うプログラム

Dim dbs As Database
Dim tdf As TableDef
Dim fld As Field

Set dbs = CurrentDb
Set tdf = dbs.TableDefs("tbl顧客")
Set fld = tdf.CreateField("対象", dbBoolean)
tdf.Fields.Append fld
tdf.Fields.Refresh


  実行結果:




それを意図的に既定値以外にしたい場合、つまり「Yes/No型フィールドを”チェックボックス”表示で追加したい」といった場合には、フィールドを追加するだけでなく、『そのフィールドに”表示コントロール”プロパティ自体もプログラムから追加』したうえで、その値を設定してやる必要があります。

それには、次のようなプログラムを実行します。

ここでは、tbl顧客テーブルに”対象”という名前の”Yes/No型”フィールドを追加したあと、さらに『DisplayControl/表示コントロール』プロパティを追加するとともに”チェックボックス(acCheckBox)”表示に設定しています。

■フィールド追加および表示コントロールの設定を行うプログラム

Dim dbs As Database
Dim tdf As TableDef
Dim fld As Field
Dim prp As Property

Set dbs = CurrentDb
Set tdf = dbs.TableDefs("tbl顧客")

'対象フィールドを追加する
With tdf
  Set fld = .CreateField("対象", dbBoolean)
  With .Fields
    .Append fld
    .Refresh
  End With
End With

'追加されたフィールドにDisplayControlプロパティおよびその値を追加する
With fld
  Set prp = .CreateProperty("DisplayControl", dbInteger, acCheckBox)
  .Properties.Append prp
End With


  実行結果:
    実行前


    実行後

| Index | Prev | Next |



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