Access2003のイベント発生方法とサブフォームの再クエリについて

このQ&Aのポイント
  • Access2003のイベント発生方法とサブフォームの再クエリについてまとめました。イベントは連結コントロールの変更や更新では発生せず、クリックイベントを利用して再クエリを実行しています。
  • Access2003のイベント発生方法について説明します。サブフォームの再クエリにおいて、連結コントロールの変更や更新ではイベントが発生せず、クリックイベントを利用して再クエリを実行しています。
  • Access2003でのイベント発生方法やサブフォームの再クエリについての情報をまとめました。連結コントロールの変更や更新ではイベントが発生せず、再クエリにはクリックイベントを利用しています。
回答を見る
  • ベストアンサー

Access2003のイベント

Access入門者です Acceessでのイベント発生が分かりません Mainフォームにサブフォームを2つ配置 (Sub_A、Sub_B) MainフォームにSub_Aの連結コントロールを作成してあります。 この連結コントロールの値でSub_Bを再クエリするシステムを作成しています。 Sub_Aでフィールドを選択するごとに連結コントロールの値は変化しますが、連結コントロールは変更又は更新イベントは発生しません。(その他のイベントも試しました) 仕方なく、連結コントロールのクリックイベントを利用して再クエリを実行しています。 Sub_Aで選択 → Sub_Bを再クエリする良い方法はありますか?

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

  • ベストアンサー
  • yorozu_ya
  • ベストアンサー率54% (76/140)
回答No.1

> Sub_Aで選択 → Sub_Bを再クエリする良い方法はありますか? Sub_Bを再クエリする処理をSub_Aの中に書けばよろしいかと。

sirpicard
質問者

補足

ありがとうございます。 Sub_AのフィールドのGetFocusイベントにSub_Bの再クエリを指示してみましたが、 ”カレントレコードには、Sub_Bというレコードは存在しません” というメッセージが出ます。 SubフォームからSubフォームのオブジェクトの取得方法がわからないためなのか?何が問題なのか分かりません。 SubフォームからSubフォームへの処理は、具体的にどのように実行すれば宜しいのでしょうか? 質問の補足ですが、MainとSub_Aはリンクフィールドがあります。 MainとSub_B間にはリンクフィールがありません。(非連結フォームです)

その他の回答 (1)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

> MainとSub_B間にはリンクフィールがありません。(非連結フォームです) なぜそういう作りにしたか分かりませんが、Sub_BのレコードソースをMainのコントロールを参照するクエリにすれば、Sub_Aのイベント発生→Mainの更新→Sub_Bの更新が出来るように思いますが。 後、Sub_Aのイベントプロシージャのコードを具体的に提示しないと、コードを見られない方としては、推測でしか判断できません。情報提供はもっと具体的にしてください。

sirpicard
質問者

お礼

遅くなりまして申し訳ございません。 SubBは補足的な情報を表示するためのもので、別フォームに表示してもよいが、なるべく1画面におさめたかったので、このようにしてみました。 Accessの基本操作を勉強中で、コードは書いていません。 もう少し勉強してみます。

関連するQ&A

  • アクセスVBについて

    メインフォームA(非連結) F_main上に コマンドボタンA cmd_AとサブフォームB(クエリに連結しておりメインフォームAとリンクはなし) sbf_Bがあります。 sbf_Bには連結したクエリのフィールドに対応するコンボボックスやテキストボックス が配置されフォームフッターには合計金額等sbf_Bのレコードのフィールドの合計を 表示するテキストボックス txt_total に演算式 (=sum([field])) と 同様にsbf_Bのレコードに対してフィルタを実行するドグルボタン dgl_filterがあります。 F_main.cmd_Aをくりっくすると サブフォーム上のtxt_totalの値を取得する。 その際にsbf_Bのフィルタが実行状態(dgl_filterが押された状態)の場合は 強制的に外してtxt_totalの値を取得したい。 以下のコードで実行すると..... ************************************ メインフォーム上のコマンドボタンAをクリック Private Sub cmd_A_Click() モジュールA.プロシージャA End Sub ************************ ***************************** sub プロシージャA dim myTotal as long rem サブフォームBのフィルタ解除して値を取得 with forms("F_main").sbf_B.Form .FilterOn=false .dgl_filter.value=0 myTotal=.txt_total end with msgbox myTotal end sub **************************** 実際の振る舞い dgl_filterが押されていない状態でcmd_Aをクリックすると メッセージボックスは値を取得するが dgl_filterが押されているとメッセージボックスの値が空白になる こうした動きになる理由を教えてほしかったのですが 分る方いるでしょうか? フィルタをオンオフ直後に値が取得できない理由 もしくは理由はなくそういった仕様なのか? 補足 あっアクセス2002です。

  • アクセス サブフォームのレコードの値が変更したら

    フォームの中にテーブルに基づいたサブフォームを入れています。 サブフォームはデータシートビューで表示しています。 そのサブフォームのレコードの値が変わったら msgboxを表示させるにはどのイベントで行なえば良いですか? サーブフォームのコントロールに Private Sub ページ名_AfterUpdate() MsgBox "" End Sub としたら確かにメッセージボックスは表示されるのですが 全てのコントロールにつけないとだめですか? 「サブフォームのレコードの値が変更したら」 とするにはどうすればいいでしょうか?

  • Access レコード移動時イベントでサブフォーム

    お世話になります。 親フォーム Aがあります。(データソースが存在します) その中にサブフォームBがあります。(データソースが存在します) 親フォームのレコード移動時のイベントで、いつもサブフォームのレコードの最後を表示したいのです。そこで・・・ 親フォームAの レコード移動時イベントに Private Sub Form_Current() Me.B.SetFocus DoCmd.GoToRecord , , acLast End Sub 上記を記述すると、一番初めはきちんとサブフォームBのレコードは最後を表示するのですが、以後、親フォームのレコードを動かすと、親フォームの最後のレコードをさしっぱなしになってしまいます。 Me.B.SetFocus DoCmd.GoToRecord , , acLast これの後にどんな記述をすれば、親フォームのレコードを動かすと同時にサブフォームBも最後の行に移るようにできますでしょうか? 何卒よろしくお願いいたします。

  • MS-Access レコードセレクタのイベント_2

    QNo.7816433で質問し、ご回答をいただいたのですが、新たな質問が発生してしまいました。 << ご回答 >> >Private Sub Form_DblClicj(Cancel As Integer) > Forms!フォームB.Filter = "ID=" & Me!ID > Forms!フォームB.FilterOn = True >End Sub << 新たな質問 >> この内容でイベントプロシージャを書いて、フォームAのレコードセレクタのWクリックで実行したところ、「フォームB」が見つからないエラーになってしまい、確かに「プロジェクトエクスプローラ」にはフォームBがありません。 フォームBは、対象テーブルと連結したフォームで、間違いなく存在するのですが、恥ずかしながらさっぱり理解できません。 フォームBも、フォームBを呼ぶフォームAも同じテーブルだからでしょうか? 因みにフォームAはクエリ経由であり、フォームBはテーブルそのものに連結しています。 もし、それが原因であるなら、フォームBは非連結で作るしかないのですが、 Forms!フォームB.ID = Me!ID のような記述で、全項目記述すれば良いでしょうか?

  • Access2007でサブフォームを再クエリする

    ==環境== OS:Windows XP Professional Ver.2002 Service Pack 3 Access 2007 マクロを使って下記の操作をしようとしています。 以前Access2000を使っていて使用できたマクロが、Access2007では動かなくなってしまいました。 このマクロをどう修正したらいいのかわかりません。 [1]フォームAに作られた一覧表(テキストボックスを使って表示している) ----------------------------------- 品名------金額a-----金額b-----合計 製品1----5000-------6000@------11000 製品2----4000-------3000-------7000 ----------------------------------- [2]そのうち明細が見たい箇所のテキストボックスをクリック  ※この場合、製品1の金額bの明細を表示させたいので   `@マークが付いているテキストボックスをクリックしています。 [3]サブフォームを持つフォームBが開く [4]フォームBの検索条件 テキストボックスの『品名検索欄』に「製品1」を入力 オプショングループの『金額区分』の「b」がON [5]フォームBを再クエリ  ※フォーム上には再クエリボタンが設置されています。   サブフォームは「sub_form」という名前で配置されています。 ==2000でのマクロ== [3]から[5]について、以下のように作成しています。 (1)フォームを開く ・フォーム名:フォームB (2)値の代入 ・アイテム:[Forms]![フォームB]![品名検索欄] ・式:[Forms]![フォームA]![品名] (3)値の代入 ・アイテム:[Forms]![フォームB]![金額区分] ・式:2 (4)キー送信 ・キー操作:+{F9} ・待機:いいえ ==2007での状況== 2000で作成したマクロをそのまま使うと(4)が動かないようです。 フォームB上では品名と金額区分が入力されており、 サブフォームに表示されるはずのデータは空です。 フォームB上の「再クエリ」ボタンを押すとデータが表示されました。 試しに(4)キー送信を再クエリ(コントロール名:sub_form)に変えたところ 「カレントレコードには'sub_form'という名前のフィールドはありません。」 と表示されてしまいました。 このマクロをどう直したらいいでしょうか。 皆さん、よろしくお願いいたします。

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

    何らかの原因でプロシージャやコマンドボタンに設定したマクロ等が無反応になる現象に苦慮しています。 多くのフォームの中で、この現象に関連するフォームは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をホームビューで開く   だらだらと長くなり説明も不十分かと思いますが、原因がどうしてもわからなく困っております。 何か手がかりを教えて頂けたらと思い投稿しました。 よろしくお願いいたします。

  • Access2000のサブフォームで…

    今、サブフォームにデータを入力する時に、コンボボックスを使ってリストから入力させたいと思っています。 それで、サブフォームにコンボAとコンボBを作成しました。コンボAで選択した項目を条件として、コンボBのリストとして使用する値を抽出したいのです。 コンボAの更新後処理でコンボBを再クエリさせるVBAを組んでみたのですが、エラーメッセージが出て実行されません。 サブフォームを単独で表示させている時にはこのVBAが実行されるのに、親フォーム内のサブフォーム上では動かなくなってしまうんです。 どのたか、解決策を教えてください。お願いします!!

  • アクセス:クエリの対象をフォーム内データに限定

    アクセス2010で住所録を作りました。 入力フォーム(メインフォーム)があり、さらにサブフォームがあります。 メインフォームの住所(A)とサブフォームにAの関連先の複数の住所(B)が入っています。 これを使用して二つのテーブルAとBを連結するクエリをつくりました。 B1住所+A住所 B2住所+A住所 B3住所+A住所 ・ ・ という感じでつなげました。 これは入力した全住所録が対象です。 この対象を、同一フォーム内の「B住所+A住所」に限定したいです。 同じフォームの中のサブフォームのデータとメインフォームのデータを連結したものを取り出すことに限りたいです。 入力フォーム内にコマンドボタンを作り、 そこから現出のメインフォームとサブフォームのデータに限定した、 クエリの結果を出したいです。 クエリの対象をフォーム内のものに限定する方法はあるでしょうか。 マクロもVBAもやったことがありません。 できるだけシンプルな方法を教えてください。 初心者ゆえにどのような表現が正しいか判断がつかず、重複している部分があります。 不首尾なところは補足いたしますので、どうぞご指摘ください。 どうか上級者の方、お助けください。

  • ACCESS2000で、エラーの理由がわかりません

    現在、ACCESS2000を使って勉強中なのですが、フォームの作成で、フォームビューにしたときに、エラー値[#NAME?]が表示されるのですが、原因がわかりません。どこ(何)をチェックすれば良いか、ご教示願います。 具体的に説明しますと、そのフォームはウィザードを使って「サブフォームがあるフォーム」を作りました。仮にそのサブフォームの名前を「A サブフォーム」とします。 フォームの詳細セクションにテキストボックスを作成し、そのコントロールソースに 「=[A サブフォーム].Form![テキストB]」 という風に、サブフォームに作成したテキストボックスの値を参照するように設定しました。ここが、エラーになります。(テキストBは、A サブフォームの詳細セクションに作ったものです。) おそらく、"A サブフォーム"が認識できていないようなんですが、設定は、式ビルダで貼付けて作っており、名前が違うなんてことはありえないと思います。 また、名前の自動修正にもチェックは入ってます。 ずっと悩んでおります。アドバイスよろしくお願い致します。

  • アクセスVBA 一個前や一個後の値を取得するには

    フォームの中にあるサブフォームの現在選択中のレコードの値を取得は出来たのですが 一個前や一個後の値を取得するにはどうすればいいですか? Sub test() Debug.Print Forms("F_Main").Controls("F_SubMain").Form.Filter Debug.Print Forms("F_Main").Controls("F_SubMain").Form.Controls("日付") End Sub で、現在のレコードの情報は取得できましたが 上のレコード、下のレコードを取得するコードを教えてください。