- ベストアンサー
Accessで、フォームAからダイアログモードで立ち上げたフォームBを開き、フォームBを閉じた時にフォームA側でマクロを実行したい
タイトルのままなのですが、 フォームA(メインとなる画面)と フォームB(コードの検索画面)があり、 フォームAからフォームBをダイアログモードで開いている状態から、 フォームBを閉じたときに、フォームA側でマクロを実行したいと思っています。 具体的には、フォームAにコード入力用のテキストボックスがあり、コード検索のためにフォームBを立ち上げ、コードを選択した後フォームAのテキストボックスにそのコードを入れて、そのコードの値を元にフォームAにあるコンボボックスの再クエリを行いたいのです。 コンボボックスの再クエリの方法等は理解しているのですが、 上記のような場合に、どのイベントがキックされるのかが分かりません。 どのようにすれば(どのイベントを選んでマクロを指定すれば)適切に実行できるでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
フォームBの処理 「値の代入」 「オブジェクトの選択」 オブジェクトの種類:フォーム オブジェクト名:フォームA 「再クエリ」 コントロール名:コンボボックス名 でいかがでしょうか?
その他の回答 (2)
- bonaron
- ベストアンサー率64% (482/745)
全部、マクロでということなら 「フォームを開く」--------- (1) フォーム名:B ウィンドウモード:ダイアログ フォームB側で「値の代入」---(2) 「再クエリ」等の処理--------(3) ダイアログモードでフォームを開くと、 そのフォームが閉じられるか、非表示にされるまで、 次の行は実行されませんから、 あらためて、イベントで処理しなくても 同じマクロに (1)(3)を連続してかけばよろしいのでは?
Private Sub Form_Close() Forms("Test").Controls("txtAAA") = Me.テキスト0 Forms("Test").Requery End Sub コンボボックスならば、 Forms("Test").Controls("コンボボックス名")Requery とフォームを閉じる時に・・・。 ただ、これだけですと、テスト時に親が開いてないとエラーになってややこしいです。 そこで、次のようにフォームが開いているかチェックしたがいいです。 Private Sub Form_Close() If FormIsLoaded("A") Then Forms("Test").Controls("txtAAA") = Me.テキスト0 Forms("Test").Requery End If End Sub Public Function FormIsLoaded(ByVal frmName As String) As Boolean On Error Resume Next FormIsLoaded = CurrentProject.AllForms(frmName).IsLoaded End Function
お礼
ありがとうございます!できました。 ただ、なるべくVBAではなくマクロで処理したいと思っていますので、質問は閉じずに残させて下さい。
補足
ご回答ありがとうございます。 (2)と(3)はフォームB側のマクロに記述することになると思いますが、 フォームB側のマクロで、フォームAのコンボボックスの再クエリを実行することはできないようなのです。 私の知識が不足しているだけかもしれません。もし「フォームB側のマクロで、フォームAのコンボボックスの再クエリを実行する」ということがVBAではなくマクロで可能でしたら、具体的な記述方法を教えて頂けないでしょうか。 保守性を高めるため、なるべくVBAは避けようと思っておりますので。。。 宜しくお願い致します。