#486 複数値フィールドの保存値を列挙するには? VBA

テーブルのデザインにおいて、フィールドに対して下記のようなプロパティ設定を行うと、ひとつのフィールドに複数の値を保存することができます。
  • [ルックアップ]タブにおいて「表示コントロール」を”コンボボックス”にする

  • 「複数の値の許可」プロパティを”はい”にする
複数値を保存するプロパティ設定

そしてそのテーブルあるいはそれをレコードソースとするフォームを開くと、下図のように、チェックボックス付きのドロップダウンリストが表示され、任意の項目にチェックを付けることよって、複数の項目を選択できるインタフェースとなります。
複数の項目を選択できるインタフェース


このフィールドに保存されている値をVBAで読み込むとき、一般的なフィールド名の指定だけでは値を取得することができません。”型が一致しません”エラーになってしまいます。1フィールド内の複数のデータもまたひとつのレコードセット、つまり複数のレコードとして内部的に保存されているためです。

複数値フィールドの保存値を列挙するには、次のようなプログラムを使います。ここでのポイントは、「特定フィールドのValueプロパティから新たなレコードセットを生成する」「そのレコードセットでは、”Value”というフィールド名に各値が保存されている」という点です。

Dim dbs As Database
Dim rst As Recordset
Dim rstShiireID  As Recordset

Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("商品")

'仕入先IDフィールドのレコードセットを生成
Set rstShiireID = rst!仕入先ID.Value
With rstShiireID
  '仕入先IDフィールド内の値を取り出すループ
  Do Until .EOF
    Debug.Print !Value
    .MoveNext
  Loop
  .Close
End With

rst.Close


実行例:
項目にチェックを付けて選択する

プログラムの実行結果

※上記の例では、仕入先IDフィールドにはルックアップで2列表示のコンボボックスが設定されています。1列目は「仕入先ID」という数値型フィールドで、「連結列」かつ列幅が「0cm」に設定されています。2列目が仕入先の会社名です。そのため、画面では仕入先名のみが表示されていますが、プログラム上のValueで取得される(イミディエイトウィンドウに出力される)のは仕入先IDの方の”数値”となります。
| Index | Prev | Next |



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