#488 複数の値を持つコントロールにデータを追加するには? フォーム、VBA

複数の値を保存可能なフィールド(複数の値の許可プロパティ”はい”)と連結したコントロールがフォーム上に配置されているとき、コマンドボタンのクリックによってそこにデータを追加する(正確には選択肢にチェックマークを付ける)プログラムの例です。

ここでは、次のようなフォームを用意します。複数の値を持つフィールド名ならびにコントロールの名前は「仕入先ID」、コマンドボタンの名前は「cmd追加」とします。
サンプルフォーム

そして、[追加]のコマンドボタンのクリックイベントプロシージャを次のように記述します。
ここでは、仕入先IDの選択値として、連結列の値が「1」、「2」、「3」の3つを選択状態(チェックを付ける)にしています。

Private Sub cmd追加_Click()
'[追加]ボタンクリック時

  'フォームのレコードセットの編集を開始
  Me.Recordset.Edit

  '仕入先IDフィールドのレコードセットに対する操作
  With Me.Recordset!仕入先ID.Value
    .AddNew
      !Value = 1
    .Update
    .AddNew
      !Value = 2
    .Update
    .AddNew
      !Value = 3
    .Update
    .Close
  End With

  'コンボボックスの表示を更新
  Me!仕入先ID.Requery

End Sub


実行結果:
■クリック前
実行結果:クリック前
■クリック後
実行結果:クリック後

なおここで、「Me.Recordset!仕入先ID」の方の「仕入先ID」はフィールド名、「Me!仕入先ID」の方の「仕入先ID」はコンボボックスのコントロール名であることに注意してください。

また、「仕入先ID.Value」のレコードセット上の「Value」フィールドは主キーですので、すでにチェックが付いている項目にさらにチェックを付けようとするとキー重複のエラーとなります。上記サンプルでは省略していますが、厳密には何らかのエラー処理が必要となります。

また、上記の仕入先IDフィールドのレコードセットの宣言は、次のように記述することもできます。

Dim rst As Recordset

Set rst = Me.Recordset!仕入先ID.Value
With rst
  (以下同様)

| Index | Prev | Next |



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