はじめに
伝票+伝票明細の画面を作っています。画面の見た目はよくあるタイプです。ここでは伝票フォーム、伝票明細フォームというオブジェクト名にとします。
メインフォーム(非連結、単票モード)
+サブフォーム(帳票モード)
で構成しています。
多画面生成を実現するためにdictionary変数を用いており、簡単に言うと次のような方法を取っています。
VBA
1'Form_画面管理用のフォームオブジェクト 2Public dic As New dictionary 3Public Sub 画面を生成() 4 Dim key As String 5 key = Timer 6 With Me.dic 7 .Add key, New 伝票フォーム 8 9 With .Item(key) 10 .Tag = Key 11 .伝票ID = Call 伝票IDを取得する処理() 12 'その他初期化処理 13 .Visible = True '画面表示開始 14 End With 15 16 End With 17 18End Sub
やりたいこと
サブフォームの指定フィールドに初期値(DefaultValue)を設定したい。
具体的には、伝票明細フォームのコントロール(TextBox,伝票ID,リレーション用の外部キーです。)
やりたい事をコードで説明するなら、以下のようになります。
VBA
1'生成された伝票フォームオブジェクトのActivateイベント 2Me.伝票明細フォーム.Form.伝票ID.DefaultValue = Me.伝票ID.Value
何故実現できないのか
冒頭でDictionaryを用いて初期化している時、サブフォームまでは潜れないようでした。(参照できない)
伝票フォームオブジェクトのOpenイベントにしかけても、参照できないエラーが発生します。
Activateイベントに引っ掛けようとしても、Activateイベント自体が呼ばれませんでした。別画面に切り替え等の操作を行ったとしてもです。
画面が表示された後、親フォームに設置した何かしらのコントロールが起こすChangeイベントでは、子フォームへ対する参照が通りますが、実装としては人による操作が開始される前が望ましいと考えています。
他のアプローチがある場合、アドバイスを頂きたく。
宜しくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/30 13:34
2020/07/01 10:05
2020/07/01 10:57
2020/07/02 00:25 編集