#723 ボタンのクリックでリスト項目編集フォームを表示させるには? フォーム、VBA

フォームに配置したコンボボックスでは、下記のプロパティ設定を行うことで、値集合ソースのテーブルやクエリにない値がキー入力されるとチェック機能が働き、指定されたリスト項目編集用のフォーム(自分で作ったオリジナルのフォーム)を開くことができます。

  • 「値集合ソース」 → 任意のテーブルやクエリ名

  • 「値集合タイプ」 → ”テーブル/クエリ”

  • 「入力チェック」 → ”はい”

  • 「リスト項目編集フォーム」 → 任意のフォーム名

■リストにない値「4900000000000」をキーイン


■[はい]を選択


■指定されたフォームが開く


また、そのような入力を行わなくても、ドロップダウンさせた状態でリスト左下にあるアイコンをクリックすることでもフォームを開くことができます。



一方、このリスト項目編集用のフォームをコマンドボタンのクリックでも開くようにしたい場合、すでにフォーム名は分かっているはずなので、シンプルに「DoCmd.OpenForm "フォーム名"」といったプログラムでもかまいません。しかしフォーム名を2ヶ所に記述することになるので、もしコンボボックス側のプロパティが変更になった場合はプログラムの方も合わせて変更する必要があります。

そこで、コマンドボタンのプログラムではコンボボックスのプロパティ値を参照してそこに指定されたフォームを開くようにすることで、1ヶ所で両者を連携させることができます。

それにはコンボボックスの「ListItemsEditForm」プロパティを参照・取得します。これが「リスト項目編集フォーム」プロパティのVBAでの表記になります。

次の例では、「cmdリスト項目編集」という名前のコマンドボタンをクリックしたとき、「cbo商品リスト」という名前のコンボの「ListItemsEditForm」プロパティを参照し、そのフォームを「DoCmd.OpenForm」メソッドで開いています。

フォームのデザイン例:


コマンドボタンのイベントプロシージャ:

Private Sub cmdリスト項目編集_Click()
'[リスト項目の編集] ボタンのクリック時

  Dim strEditForm As String

  'コンボボックスのリスト項目編集フォームの名前を取得
  strEditForm = Me!cbo商品リスト.ListItemsEditForm

  'そのフォームを非表示で開く
  DoCmd.OpenForm strEditForm, , , , , acHidden

  '作業ウィンドウ固定に設定して非表示解除
  With Forms(strEditForm)
    .Modal = True
    .Visible = True
  End With

End Sub

ここでは単純に「DoCmd.OpenForm Me!cbo商品リスト.ListItemsEditForm」という命令1つだけでもかまいません。しかしあえて手動でリストにない値をキーインしたときの動作と同じように、開いたフォームの作業ウィンドウを固定(他の画面等を操作できない状態、またナビゲーションウィンドウが閉じた状態)にしています。
またその場合、あとから「.Modal = True」とするとそのフォームのタブの[×]の閉じるボタンも使えなくなってしまうので、わざわざ『非表示で開く → 作業ウィンドウ固定 → 非表示を解除して表示状態にする』といった手順を踏んでいます。

実行例:




※コンボボックスの値集合ソースによっては、編集用フォームを閉じるタイミングなどでこのコンボボックスを再クエリして、その編集結果を反映させた最新状態に更新する必要があります(おそらく単純でないクエリの場合など)。
※さらに利便性のために、編集用フォームを閉じるときのカレントレコードをコンボボックスに自動的に代入させるような処理も追加するとよいかもしれません。


関連Tips:
   「#645 ボタンのクリックでリスト項目の編集ダイアログを表示させるには?」
| Index | Prev | Next |



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