#716
チェックボックス付きリストボックス風画面の作り方
フォーム、VBA
AccessのリストボックスコントロールではチェックボックスのON/OFFでその行の選択・非選択を切り替えるようなインタフェースを作ることができません。ここではその代替えとして、サブフォームを使ってそれっぽい画面を作る方法を紹介します。
まず、
チェックボックスのON/OFFを保存するフィールドを持ったテーブルを作成
します。リストボックスに表示したい項目、それにプラスしてYes/No型のフィールドを持たせます。・・・・ここでは「tbl従業員選択」テーブル、「選択」フィールドとしています
サブフォーム側で表示する項目を限定できますので、それ以外のフィールドがあってもかまいません。既存のテーブルがそのまま使えるのであれば、それにYes/No型のフィールドを付け加えることもできます。
ここではそのようなテーブルやデータがすでにあるものとしますが、ケースによっては既存のテーブルがそのままでは使えない場合もあるかもしれません。たとえば、グループ化したデータを選択肢としたい、複数ユーザーが共有するリンクテーブルのためYes/No型のフィールドも共有されてしまう、などのケースです。その場合には、元のテーブルから”テーブル作成クエリ”、あるいは”削除クエリ+追加クエリ”を実行することで、作業テーブルを都度生成し、それを画面表示に使うようにします。
次に
サブフォームを新規作成
します。状況にもよりますが、ここでは「既定のビュー」を”データシート”としています。
そのサブフォームのレコードソースを「tbl従業員選択」に設定し、表示したいコントロールを適宜配置します。
フォームの
「追加の許可」および「削除の許可」プロパティを ”いいえ”
に設定します。Yes/No型の「選択」フィールドは更新できかつテーブルに保存しますので、
「更新の許可」プロパティだけ ”はい”
にします。
必要に応じて「詳細」セクションの「代替の背景色」を”色なし”に設定します。
よりリストボックス風にするために選択行の文字色・背景色を替えたいのであれば、各”テキストボックス”に
「条件付き書式」
の設定を行います(”チェックボックス”は条件付き書式は設定できません)。ここでは
「式」として『[選択]=True』
を指定します。
今回はフォームを使っているため、別の行に移動するなど、一定の操作を追加しないとそのレコードは保存されません。そのため、
”いずれかの欄をクリックしたらすぐに行が選択される”
、
”チェックマークが付く”
といった動作をしてくれません。それを補完するため、下記のようなイベントプロシージャを作成します。
Private Sub 選択_AfterUpdate()
'[選択]の更新後処理
'カレントレコードを強制的に保存
DoCmd.RunCommand acCmdSaveRecord
End Sub
Private Sub 氏名_Click()
'[氏名]のクリック時
'選択のON/OFFをトグル
With Me!選択
.Value = Not .Value
.SetFocus
End With
選択_AfterUpdate
End Sub
Private Sub 従業員番号_Click()
'[従業員番号]のクリック時
'選択のON/OFFをトグル
With Me!選択
.Value = Not .Value
.SetFocus
End With
選択_AfterUpdate
End Sub
選択_AfterUpdate
「選択」のチェックボックスが更新されたら、すぐにそのレコードを保存しています。
氏名_Click()、従業員番号_Click()
氏名や従業員番号の欄がクリックされたら「選択」欄のチェックマークの有無が交互に切り替わるようにしています。またそれによって「選択」の値が更新されますので、「選択_AfterUpdate」イベントプロシージャも実行します。
最後に
メインフォームを新規作成
し、その中に上記のフォームをサブフォームとして配置します。メインフォーム側のデザインは任意ですので、適宜必要なコントロールを配置するなどしてください。
※メインフォーム側の[OK]ボタンなどで何らかの処理を行う際、どの項目が選択されているかは、サブフォームのRecordsetCloneを取得したり、「tbl従業員選択」テーブルを直接参照することで判断します。
実行例:
|
Index
|
Prev
|
Next
|
T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved