在庫確認システムを作るためにAccessを始めた当初、コンボボックスの複数列表示の方法がわかりませんでした。
列数を変更
コンボボックスのプロパティシートにて列数を2列にします。列幅も1列目、2列めのサイズに応じて書き換えます。
(サンプルはコントロール名がコンボ0、コンボ3、コンボ5になっています)
値集合ソース
このコンボボックスに表示させるテーブル(T_社員)は下記の通りです。
ID | オートナンバー型 |
社員コード | 数値型 |
社員 | テキスト型 |
所属 | テキスト型 |
このテーブルをコンボボックスのプロパティシートに反映させます。値集合ソースは
1列(社員コードのみ)の場合
SELECT T_社員.社員コード FROM T_社員 ORDER BY T_社員.社員コード;
2列(社員コードと社員)の場合
SELECT T_社員.社員コード, T_社員.社員 FROM T_社員 ORDER BY T_社員.社員コード;
3列(社員コードと社員と所属)の場合
SELECT T_社員.社員コード, T_社員.社員, T_社員.所属 FROM T_社員 ORDER BY T_社員.社員コード;
と記載します。ORDER BY 社員.社員コード
はORDER BY 社員.社員
とすれば社員名の昇順に変更されます。
コンボボックスウィザードを使用した場合の注意
コンボボックスウィザードにてテーブルやクエリからフィールドを選択して同様に作り表示することができます。
しかし、コンボボックスの中身(.value)が「ID」になっていることがありませんか?ウィザードの時に「ID」を除外した筈ですが・・・
コンボボックスのプロパティシートから「値集合ソース」を見てみると、
SELECT [T_社員].[ID], [T_社員].[社員コード], [T_社員].[社員] FROM [T_社員] ORDER BY [社員コード];
さらに
「列数」が「3」になっていて、列幅が「0cm;2.54cm;2.54cm」になっています。
「値集合ソース」から「[T_社員].[ID],」を削除して⇩
SELECT [T_社員].[社員コード], [T_社員].[社員] FROM [T_社員] ORDER BY [社員コード];
とし、列幅を「2」に、列幅から「0cm;」を消せばコンボボックスの値に「ID」ではない値(上記例では社員コード)が入ります。