#723 | ボタンのクリックでリスト項目編集フォームを表示させるには? | フォーム、VBA | |
フォームに配置したコンボボックスでは、下記のプロパティ設定を行うことで、値集合ソースのテーブルやクエリにない値がキー入力されるとチェック機能が働き、指定されたリスト項目編集用のフォーム(自分で作ったオリジナルのフォーム)を開くことができます。
■[はい]を選択 ■指定されたフォームが開く また、そのような入力を行わなくても、ドロップダウンさせた状態でリスト左下にあるアイコンをクリックすることでもフォームを開くことができます。 一方、このリスト項目編集用のフォームをコマンドボタンのクリックでも開くようにしたい場合、すでにフォーム名は分かっているはずなので、シンプルに「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 またその場合、あとから「.Modal = True」とするとそのフォームのタブの[×]の閉じるボタンも使えなくなってしまうので、わざわざ『非表示で開く → 作業ウィンドウ固定 → 非表示を解除して表示状態にする』といった手順を踏んでいます。 実行例: ※コンボボックスの値集合ソースによっては、編集用フォームを閉じるタイミングなどでこのコンボボックスを再クエリして、その編集結果を反映させた最新状態に更新する必要があります(おそらく単純でないクエリの場合など)。 ※さらに利便性のために、編集用フォームを閉じるときのカレントレコードをコンボボックスに自動的に代入させるような処理も追加するとよいかもしれません。 関連Tips: 「#645 ボタンのクリックでリスト項目の編集ダイアログを表示させるには?」 |
|||
|
Copyright © T'sWare All rights reserved |