• ベストアンサー

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ではなくマクロで処理したいと思っていますので、質問は閉じずに残させて下さい。

関連するQ&A

  • access フォームのコマンドボタンをマクロ実行

    access97 フォームの中のコマンドボタンをひとつのマクロで実行したい お世話になります 上記表題のように現在access97をwindowsXP sp3で使用しています ここで例えば フォーム Aというフォームのなかに コマンドボタンBが 設置されているとします コマンドボタンBをワンクリックするとイベントプロシージャーCが実行されるとします お尋ねしたいのは ひとつのマクロDによって 上記 一連の操作をしたいのですが マクロをデザインビューで開きますと まず アクションにおいて フォームを開く 下左のダイアログに フォームの名称に コンボリストから Aを選択します 次に このコマンドボタンBを実行するために このマクロDのデザインビューにおいて 以下の行のアクションに どのように 入力したら よいものか 御教示願いたいです コマンドの実行 から できるかなと 思ったのですが 適切な項目がリストから 表示されません 御存じの方 宜しくお願い致します access97以降の新しいバージョンでのご解説でも参考になりますので 宜しくお願い致します

  • (アクセス)全てのイベントプロシージャが無反応に

    何らかの原因でプロシージャやコマンドボタンに設定したマクロ等が無反応になる現象に苦慮しています。 多くのフォームの中で、この現象に関連するフォームは2画面あり、それぞれをフォームA、フォームBということで説明いたします。((1)~(4)) (1)フォームAのコマンドボタン押下でフォームBを開きクエリーのデータ(フォームAで指定した条件)  を表示しています。  フォームBで他のフォームと異なっているプロパティは次の通りです。  ・ポップアップ ----はい  ・作業ウィンド固定 --はい (2)フォームBにはレコードソース(クエリ)の値を表示する幾つかのテキストボックスとコンボボックス  が2つあり、それぞれをコンボA、コンボBとするとフォームBを開いた時はそれぞれにクエリーの   データを表示し、変更する場合はコンボAで選定した条件でクエリによりコンボBにデータを表示す  るようにしています。 (3)なお、コンボAの列数は2で、コンボボックスには列1のデータ(商品名)を表示するようしていて列 2の値(商品コード)を一旦テキストボックスに取り出し、そのコードでクエリによりコンボBのデータ  を表示しています。テキストボックスのプロパティのコントロールソースには次のように記述していま す。   =コンボ186.column(1)   ※=コンボ186がコンボAのことです (4)あと、フォームBにはデータをチェックするためのイベントプロシージャが幾つかとフォームAへ戻る ためのコマンドボタンがありますが他のフォームと比べても特に問題は無いように思えます。 以上のような環境でフォームAからフォームBを開いた時に、フォームBにはレコードソースであるクエリの値は全て表示するものの全てのイベントプロシージャ及び(3)で説明しました  =コンボ186.column(1) の処理が一切動作しなくなります。 しかし、次の操作により回復し、その後はACCESSを終了し再起動しても正常に動作します。  ・フォームBをデザインビューで開く  ・フォームBを開く時に設定しているイベントプロシージャを表示  ・イベントプロシージャをいじって閉じる。(内容は変更しない)  ・フォームBをホームビューで開く   だらだらと長くなり説明も不十分かと思いますが、原因がどうしてもわからなく困っております。 何か手がかりを教えて頂けたらと思い投稿しました。 よろしくお願いいたします。

  • Accessマクロでパラメータークエリ実行

    Microsoft Accessのマクロでパラメータークエリを実行する方法を調べると、VBAで実行する方法しか出てきませんが、マクロではできないでしょうか。 検索フォームに条件を入力して検索するマクロを作りたいです。

  • エクセルVBAのユーザーフォーム上のテキストボックスについての質問です

    エクセルVBAのユーザーフォーム上のテキストボックスについての質問です。 Aのユーザーフォームの内容をBのユーザーフォームのテキストボックスへ引き継いで、Bのユーザーフォーム上で内容を編集するという仕組みにしたいのです。 Bのユーザーフォームは新規入力もかねたユーザーフォームなので、テキストボックスのイベントにAfterUpdateを使用して、テキストボックスの内容が書き換えられるとデータベースから検索して新規か既存か判断させています。 AのユーザーフォームからBのユーザーフォームのテキストボックスへ引継ぎさせるときにこのAfterUpdateを発生させたくないのですが、Application.EnableEvents=Falseなどを使ってもイベントが発生してしまいます。 また、イベントがどのタイミングで発生するかと、コードをステップで実行させると、このイベントは発生しません。そのために、いきづまってしまいました。 AのユーザーフォームからBに引き継ぐ処理  ユーザーフォームB.Load ---ユーザーフォームBのイニシャライズが実行される  ユーザーフォームB.テキストボックス = ユーザーフォームA.テキストボックス  ユーザーフォームB.Show ちょっと簡単に書きすぎですがこんな感じです。 コードをステップで実行するとユーザーフォームBのAfterUpdateは実行されません。(VBAエディタのバグ?) どなたか回答お願いします。

  • マクロ実行時、ユーザーフォームにラベルのテキストが表示されません。

    エクセル2003VBAで、マクロ実行時にユーザーフォームを モードレス表示して、そのユーザーフォームにラベル「マクロ実行中です・・・」を貼り付けています。 しかし、処理が追いついていないのか、そのラベルが表示されません。 ユーザーフォームにはコードを記述していません。コードは以下のみです。 UserForm1.Show vbModeless テキストをTrueにしてからマクロ処理のようなコードがあるのでしょうか? お手数をおかけしますが、解決方法をご存知の方よろしくお願いいたします。

  • VBAの記述でフォームを操作させたい

    検索用フォームに検索結果表示用のボタンを配して利用しています。私のスキルのレベル問題から全てをマクロ操作で行える様、皆様からアドバイスを頂きまして使える様にはなりましたが。しかし、マクロのイベント欄の左に警告マークが表示(固定表示)されますので、早急に表示されない方法で使用したいと思っております。誠に勝手申しますがアドバイスを頂けませんでしょうか。 [操作したいフォームの構成とVBA記述で実現したいこと] 1、検索用フォームの構成 ・検索用フォーム名:検索Aフォーム ・検索結果フォーム表示用ボタン名:スタート ・コンボボックス名:コンボa、コンボb、コンボc ■やりたいこと 「検索Aフォームに配したコマンドボタンを使って」 a、検索Aフォームの最小化 b、結果Aフォームの表示 c、コンボボックスの入力表示を消去 2、検索結果フォームの構成 ・検索結果フォーム名:結果Aフォーム ・検索用フォーム表示用ボタン名:バック ※結果Aフォームの参照クエリ名:検索クエリ ■やりたいこと 「結果Aフォームに配したコマンドボタンを使って」 a、検索Aフォームを元のサイズに戻す b、結果Aフォームの最小化 既にマクロで作ったフォームのVBAを探してみましたが、マクロで作成したコマンドボタン名やコンボボックス名が見つけられない等を経験しました。自身でよく使うマクロの記述を教えていただければ、逆引き感覚で少しは早く覚えられるのではと思っています。以上ですが、宜しくお願いします。

  • AccessのフォームでVBAの実行時タイミング

    フォームにいくつかテキストボックスがあります。 テキストボックス上でEnterを押して確定したらVBA実行、タブキーでテキストボックスの移動だったら VBAは実行しない、というようにしたいのですが、どのように記入すればいいのでしょうか?

  • アクセスのクエリを開く前にマクロを実行できますか?

    フォームやレポートを開く前にマクロを実行できますが、同様のことをクエリを開く前にもする方法はないでしょうか? 具体的には、いくつかのテーブル作成クエリと追加クエリをまとめて行うマクロを実行してから、選択クエリを開きたいのです。 「SQLビューで1行加えるだけ」みたいなのができると助かります。 よろしくお願いします。

  • アクセス フォームのマクロに関して

    アクセスでマクロにてフォームを閉じるを選択しているのですが 新規レコードが必ず追加されてしまいます。 そのフォームはデータ入力用のフォームなのですがデータ入力終了時 テキスト欄をすべて空白でマクロの閉じるを実行させると 必ずテーブルに空白の新規レコードが入力されてしまいます。 なにかいい方法ありますでしょうか?

  • コンボボックスの入力表示の消去

    アドバイスをお願いします。 [知りたいこと] 検索ボックス(コンボボックス)で検索した値を合致フォーム(フォーム)で開くとき、一緒に検索ボックス(コンボボックス)の値(入力表示)もクリアにしたい。 [セット条件] ・コンボボックス名:検索ボックス ・検索結果フォーム名:合致フォーム ・合致フォームを開くコマンドボタン名:開くボタン [お願い] 現在は、コマンドボタンをイベントのマクロでフォームを開くで設定している。コマンドボタンでフォームを開く設定をコードビルダで記述するスキルがない為、マクロで可能でしたらマクロで教えていただけませんでしょうか。マクロがダメなときはコードビルダでお願いします。勉強しますので。 以上ですが、宜しくお願いします。

専門家に質問してみよう