Accessのフォームに3種類のコンボボックスを配置しました。
コンボボックスにテーブルデータを表示させる方法についてご紹介したいと思います。

値集合タイプ
コンボボックスの値集合タイプには、3種類あります。
・1. テーブル/クエリ
・2. 値リスト
・3. フィールドリスト
よく使われるのは、1のテーブル/クエリと2の値リストになります。
テーブル

クエリビルダー

内容的には、クエリと同じです。
表示したい項目を選択して並び順の指定や抽出条件を指定します。
他から参照したり使いまわししたいときに使えないので汎用性はありませんが
汎用的に使う場合は、クエリーかVBA方式をオススメします。
全部同じように修正したい場合は、全コントロールを1つ1つ開いてプロパティ
からコンボボックスビルダーを起動して修正しないといけないので
大規模なシステムでは使用しない方がよいと思います。小規模ならありかと思います!
表示イメージ
表示イメージは下記のような感じに表示されます。

基本的な設定
クエリビルダーで「skill_kbn」「skill_nm」を取得しているのに
実際のコンボボックスに表示される場合に、「skill_nm」しか表示されません。
これは、プロパティの設定で行っています。
コンボボックスのプロパティの書式タブ

列数:2
列幅:0cm;5cm
としています。これで1列目の「skill_kbn」は非表示になっています。
それに対してデータタブの連結列を見てみます。

連結列:1
となっているのがわかると思います。
これは、選択した際に使用するのは「skill_kbn」の方を使うよという意味になります。
テーブルのキーとしては名称ではなく区分値の方になるためそのようになります。
クエリー
クエリーを作成しておいて、それをコンボボックスで使用する場合
1. クエリを作成
Q_スキル

2. プロパティに指定
作成したクエリを保存します。→フォームのコンボボックスのプロパティにクエリーを選択

クエリーの場合は、これだけで表示することができます。
もし修正する場合、クエリーを修正すれば条件等も修正できます。

VBA
VBAでコンボボックスを表示を行う事も可能です。
コンボボックス間の紐づけを行う場合に便利です。
1. フォーム開くイベント
Private Sub Form_Open(Cancel As Integer)
Call subSetSkillID
End Sub2. VBA(スキル情報取得)
内容としては、クエリビルダーやクエリーで作成したものをSQLビューで表示して
そのSQLをコピーして文字列結合していけば使えるようになります。
Rem ----------------------------------------------------------------------------------
Rem 関数名 : subSetSkillID
Rem 処理内容 : スキル情報を取得しコンボボックスに設定する
Rem 引 数 : なし
Rem 戻り値 : なし
Rem ----------------------------------------------------------------------------------
Private Sub subSetSkillID()
Dim objRS As Recordset
Dim strSql As String
On Error GoTo Error
' SQLの実行
strSql = "SELECT skill_kbn, skill_nm FROM m_skill "
strSql = strSql & " ORDER BY skill_kbn, skill_nm;"
Set objRS = CurrentDb.OpenRecordset(strSql, dbOpenDynaset)
' レコードセットの複製をコピー
Set Me.cboBPID.Recordset = objRS.Clone
' 後処理
objRS.Close
Set objRS = Nothing
Exit Sub
Error:
MsgBox "エラーが発生しました。エラー内容:" & Err.Description & Chr$(10), vbCritical, frmNm & "関数:subSetSkillID"
End Sub何かあった時にVBAだと検索で一括置換もできます。


コメント