• ベストアンサー

Accessで、フォームAからダイアログモードで立ち上げたフォームBを開き、フォームBを閉じた時にフォームA側でマクロを実行したい

タイトルのままなのですが、 フォームA(メインとなる画面)と フォームB(コードの検索画面)があり、 フォームAからフォームBをダイアログモードで開いている状態から、 フォームBを閉じたときに、フォームA側でマクロを実行したいと思っています。 具体的には、フォームAにコード入力用のテキストボックスがあり、コード検索のためにフォームBを立ち上げ、コードを選択した後フォームAのテキストボックスにそのコードを入れて、そのコードの値を元にフォームAにあるコンボボックスの再クエリを行いたいのです。 コンボボックスの再クエリの方法等は理解しているのですが、 上記のような場合に、どのイベントがキックされるのかが分かりません。 どのようにすれば(どのイベントを選んでマクロを指定すれば)適切に実行できるでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • bonaron
  • ベストアンサー率64% (482/745)
回答No.3

フォームBの処理 「値の代入」 「オブジェクトの選択」   オブジェクトの種類:フォーム   オブジェクト名:フォームA 「再クエリ」   コントロール名:コンボボックス名 でいかがでしょうか?

その他の回答 (2)

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.2

全部、マクロでということなら 「フォームを開く」--------- (1)   フォーム名:B   ウィンドウモード:ダイアログ フォームB側で「値の代入」---(2) 「再クエリ」等の処理--------(3) ダイアログモードでフォームを開くと、 そのフォームが閉じられるか、非表示にされるまで、 次の行は実行されませんから、 あらためて、イベントで処理しなくても 同じマクロに (1)(3)を連続してかけばよろしいのでは?

stolichnaya
質問者

補足

ご回答ありがとうございます。 (2)と(3)はフォームB側のマクロに記述することになると思いますが、 フォームB側のマクロで、フォームAのコンボボックスの再クエリを実行することはできないようなのです。 私の知識が不足しているだけかもしれません。もし「フォームB側のマクロで、フォームAのコンボボックスの再クエリを実行する」ということがVBAではなくマクロで可能でしたら、具体的な記述方法を教えて頂けないでしょうか。 保守性を高めるため、なるべくVBAは避けようと思っておりますので。。。 宜しくお願い致します。

noname#22222
noname#22222
回答No.1

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

stolichnaya
質問者

お礼

ありがとうございます!できました。 ただ、なるべくVBAではなくマクロで処理したいと思っていますので、質問は閉じずに残させて下さい。