在庫管理システム⇩を作る過程で必要になったことです。
入出庫履歴から、該当の品目の在庫を知りたいとき、いちいちフォームを開き直すのが面倒なため、サブフォームをダブルクリックすることで、開きたい別のフォームに飛ぶということをやりました。
あるフォームにサブフォームコントロールを配置して、フィールドをダブルクリックすることによって他のフォームのテキストボックスやコンボボックスなどに値を渡すVBA記述です。
最初に
初めに簡単なサンプルを用意しました。これはサブフォームのフィールド1をダブルクリックしますと、右のラベルの表示が変わるものです。
フォームにおけるVBAの記述はありません。サブフォームの方に記述があります。ダブルクリックのイベントを発生させたいフィールドをクリックして選択します。
プロパティシートのイベントタブをクリックします。ダブルクリックのイベントプロシージャを選択しますとVBエディタが開きますので下記のようにコードを書きます。
Private Sub フィールド1_DblClick(Cancel As Integer)
Forms![フォーム1]![ラベル1].Caption = "ID=" & Me!ID
Forms![フォーム1]![ラベル2].Caption = "フィールド1=" & Me!フィールド1
End Sub
応用
他のフォームを開き、コントロールに値を転送する場合には次のようになります。転記先のコントロールがテキストボックスやコンボボックスでは.valueですが、ラベルですと.captionになります。コントロールに応じて書き換えます。
⇩が基本形になります。
Docmd.OpenForm "(転記先フォーム名)"
Forms![転記先フォーム名]![転記先コントロール名].Value = Forms![転記元フォーム名]![転記元サブフォーム名]![ダブルクリックしたフィールド名].Value
サンプルダウンロード
VBAコードがありますので、最初はセキュリティ警告メッセージが表示されます。「コンテンツの有効化」をクリックしますと、動作します。
拡張子を.mdbにしてあります。Access2002以降で開けると思います。
最後に
これをやりたくて、結構ググりましたが、なかなかみつからずに苦労した部分です。
誰かの参考になれば幸いです。