【Access】コンボボックスにテーブルデータを表示

スポンサーリンク

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 Sub

2. 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だと検索で一括置換もできます。

コメント

タイトルとURLをコピーしました