MS-ACCESSのフォーム切り替え表示について

このQ&Aのポイント
  • フォームAからフォームBを呼び出して表示させる方法について教えてください。
  • フォームAには複数の個人名のボタンがあり、フォームBにはその個人の全情報が表示されます。
  • フォームBの情報量が多いため、表示に時間がかかります。VBAを使用して待機処理を行いたいのですが、うまくいきません。
回答を見る
  • ベストアンサー

MS-ACCESSのフォーム切り替え表示について

フォームA(少量データ)からフォームB(大容量データ)を呼び出して表示させる方法について 教えてください。 まず、フォームAは複数の個人名のボタンとサブフォームで全員の最新情報が表示される ものを作っています。 この個人名のボタンをクリックするとフォームBにその個人の全情報を表示させる仕組みなのですが、フォームBは情報量が多い為、表示させるのに時間がかかります。 そこで下記のようなVBAを記述し、Do~LoopでフォームBが開くまでの時間を稼ごうと思っても 次の処理が行なわれてしまい、エラーになってしまいます。 Private Sub ボタン_Click() DoCmd.OpenForm "フォームB" Do Until SysCmd(acSysCmdGetObjectState, acForm, "フォームB") = acObjStateOpen DoEvents Loop Application.Forms![フォームB].Controls![担当者名] = "担当A" Me.フォームB.Requery End Sub これでフォームBが開くまで待ってから次のステップのフォームB内の条件設定や Requery処理を行なうと思っているのですがうまくいきません。 DoEvents処理が入っているせいかと思い、はずしたのですがそれでもうまくいきません。 もともとはフォームBだけで運用していたのですがデータ量が増えて表示に時間がかかり すぎるので新たに項目は同じで件数の少ない最新情報のみのテーブルを作成し、 それをもとにフォームAを作成しています。 ですのでフォームA,Bともに同じようなサブフォームになっており、またそれぞれの サブフォームを構成するテーブルが異なる為に1つのフォームでの処理ができません。 拙い説明ですがどなたかご教授願います。

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

  • ベストアンサー
回答No.1

> Application.Forms![フォームB].Controls![担当者名] = "担当A" ここでエラーになるということですか。 その行とDo ... Loop を削除して、 フォームB の開くときか読み込み時に、 Me.Controls![担当者名] = "担当A" とするのではだめですか。 "担当A"という値をフォームAの方で決めたいということなら、 DoCmd.OpenForm "フォームB", OpenArgs:="担当A" として、フォームB の開くときか読み込み時に、 Me.Controls![担当者名] = Me.OpenArgs

sou429
質問者

お礼

hatena1989様 回答有難うございます。 早速、フォームAで『DoCmd.OpenForm "フォームB", OpenArgs:="担当A"』として フォームBの読み込み時に『Me.Controls![担当者名] = Me.OpenArgs』として確認したのですが「実行時エラー2485 マクロを見つけることができません」となってしまいました。 どこがおかしいのでしょうか? たびたび申し訳ありませんがよろしくお願いします。

sou429
質問者

補足

hatena1989様 回答有難うございます。 すみません、間違えがわかりました。 無事にできました。ありがとうございます。

関連するQ&A

  • Access メインフォームのリフレッシュについて

    Access2003 にて、下記の手順で処理するプログラムを作成しています。 メインフォーム(埋め込みサブフォーム ※データシートビュー 一覧表) →埋め込みサブフォームの対象のレコードセレクタをダブルクリック。 →別フォームを起動し、データ入力更新。別フォームを閉じる。 →メインフォームのリフレッシュ し別フォームで変更した内容を反映させたい。 メインフォームのリフレッシュを行いたいのですが、うまくいきません。 ■試してみたこと メインフォーム、サブフォーム、別フォームとあり、 1. 別フォームのデータ更新が終了したあと、 別フォームを閉じる直前にForms![メインフォーム名].requery をしてみた メインフォームは別フォームを開く前の状態と、変化なし 2. 別フォームのデータ更新が終了したあと、別フォームを閉じ サブフォーム内ロジックで、Forms![メインフォーム名].requery をしてみた メインフォームは別フォームを開く前の状態と、変化なし 3. 別フォームのデータ更新が終了したあと、別フォームを閉じ サブフォーム内ロジックで、Me.requery をしてみた メインフォームは別フォームを開く前の状態と、変化なし ----- いずれもメインフォームには変化はありませんでした。 出来れば、メインフォームにはForm_Loadした時と同じように 処理を走らせたい(メインフォームを閉じることなくフォームロードから処理を再開させたい) と考えています。 サブフォームを含め、メインフォームごとリフレッシュするような処理はないでしょうか。 ご存知のかた宜しくお願いいたします。

  • アクセスのメインフォームのみRequeryしたい

    アクセスでフォームを作製しています。 シンプルに「メインフォームの中にサブフォームがある」形で作製し各フォームにはクエリをレコードソースとして指定しています。検索したいデータのコードを入力してそのデータを表示させる・・・という一般的なフォームなのですが、メインフォームのみRequeryさせたいのですができますか? [Forms].[メインフォーム].requery とするとサブフォームまで再計算されてしまいますが、ここでサブフォームは再計算させないで、メインフォームだけ再計算させたいのです。宜しくお願いします。

  • ms accessでのフォームの開き方

    アクセス初心者です。 アクセスで「サブフォームa(~n)」を持つ「フォーム1」を参照用(ユーザー用read only)と追加変更用(管理者用)を開きたいのです。 (サブフォームは「フォーム1」の主キーで選択されたクエリを基にしたフォームを使用) 私の不勉強さもあるのか、マクロでは、フォームをread onlyに設定できないようですし、「フォーム1」のプロパティの設定をしてしまうと、「フォーム1」は参照専用のフォームとなってしまうようです。 また、サブフォームについては、追加・編集モードの選択もできず、結局コピーではできず、苦労しきりです。 こういう場合、初心者レベルの私としては、「フォーム1」を基に、プロパティを変えることで対応せざるを得ません。(サブフォームも二通りで二度手間) 実務上は、手間とボリウムの問題ですので構わないのですが、「そんなはずはない」という思いもありますし、でもVBEのコードを書くには、私の「バカさ加減」が許しませんし・・・・ こういう場合は、一般的にはどうしたらよいのでしょう。 現状サブフォームには、検索結果としてクエリを基にしたフォーム(表形式)に詳細表示ボタンを貼り付けています。メインフォームの主キーにリンクしたレコードがサブフォームに表示されるわけですが、そのサブフォームに詳細表示ボタン(マクロ)で詳細情報を、read onlyと編集を選択させたいのですが。 私の能力とユーザーのレベルからは、別々のフォームでプロパティをそれぞれ設定して、メニューで分岐させるのが、不意なレコードの書き換えや削除を防止する最良の方法でしょうか? どなたかアドヴァイスお願いします。 質問もままならないほど、初心者です。

  • MS Access2000のフォームについて

    たとえば、Aという表形式のフォームがあります。 項目名は、氏名、生年月日、年齢です。 そのフォームのレコードごとの右端にはコマンドボタンがあります。 そのコマンドボタンをクリックすると、Bというフォームが開きAで選択したデータの詳細(氏名、生年月日、年齢、住所、電話番号等々)が表示されるようにしたいのですが、そのやり方をどなたか教えていただけないでしょうか。 VBA初心者ですが、簡単なものならわかるのでVBAを使用したものでもOKです。 どうぞよろしくお願いいたします。

  • アクセスでの詳細表示のしかた

    新規採用の応募者のDB作成しました。 学校の種別(大学院、大学、高校)や学校名で検索(クエリ)のフォーム(A)に、応募者テーブルを基にしたデータシート型のサブフォーム(B)を埋め込みました。 ここまでは、学校名の一覧表示のフォーム(O)に詳細表示用のボタンを配し、マクロで上記のサブフォームを含む、学校情報フォーム(A)を開くのはできました。 次に、このサブフォーム(B)中の応募者のID(氏名でも)をダブルクリックすると、応募者の詳細表示フォーム(C)を表示できるようにしたくて、応募者IDのコントロールのプロパティでイヴェントのダブルクリックにマクロを設定しました。 (C)フォームを開く where条件として [フォーム(B)]![応募者ID]=[フォーム(C)]![応募者ID]としても、左項の値が右項へ代入されず、うまく行きません。 どうしたら、サブフォーム(データシート)の帯び データから特定のレコードを指定して、更に別のフォーム(特定レコード)の表示が可能なのでしょうか? 不慣れで、説明もままならないこんな私にどなたかHELP!

  • Access2007のサブフォームのRequeryで悩んでいます。。

    Access2007のサブフォームのRequeryで悩んでいます。。 Aメインフォーム Bサブフォーム埋め込みコントロール Cサブフォーム リストボックスう AにBを貼り付けBのソースオブジェクトにCを指定しています。 Cは帳票形式です リストボックスをクリックしたら、 CのRecordSourceにSQLを挿入し、 CをRequeryしていますが、全くRequery出来ていない模様なのです。。 B.SourceObject="C"も試したのですが、全く思った通りのデータが抽出されません。 B.Form.Requery Me.B.Form.Requery どれも試して駄目でした。 CのRecordSourceに直接SQLを貼り付けたら思った通りに出ますが、 Requeryが機能していない気がします。 実行結果は、数件対象データはあるのに、Cの中身は空になります。。。 正しくRequeryする方法、もしくは違うやり方があればご教授頂けないでしょうか?

  • Accessのフォーム その2

    すいません、以前にも同じ質問をしたのですが、私の質問の仕方が悪くてうまくいきませんでした。 回答してくださった方、ありがとうございました! もう一度、詳しく質問しなおします。 顧客データを登録しているのですが、テーブルを元に登録フォームを作成しました。 商品がたくさんあって、4つのコードに分かれています。フォームの中に[A][B][C][D]と4つのコンボボックスを作成し、絞込み検索ができるようにはしました。 しかし、選んだデータの[A]しかテーブルに表示されません。例えば[A]のコンボボックスの中から[1010]を選択、[B]のコンボボックスから選択しようとしても空っぽです。 テーブルを見ると、[A]で選んだ[1010]だけが表示されています。 非連結のときはうまく出てたんですが・・。 もしかして連結列が間違ってるのでしょうか?? 元になるテーブルは Aコード A  Bコード B Aコード Cコード C Bコード Dコード D Cコード この2列目を表示したいのです。(2列目が[1010]など表示したいデータ) 列数はそれぞれ「2」で連結列は「2」です。 更新後処理は以下の通りです。 Private Sub コンボ0_AfterUpdate() Me!コンボ2.Requery End Sub Private Sub コンボ2_AfterUpdate() Me!コンボ4.Requery End Sub Private Sub コンボ4_AfterUpdate() Me!コンボ6.Requery End Sub ぜひよろしくお願いします。

  • アクセス フォームをリクエリしたい

    フォームAを閉じて、フォームBのテーブルに基づいたデータをリクエリ(更新)したいのですが DoCmd.Close acForm, "フォームA" DoCmd.Requery "フォームB" 実行時エラー2109 「カレントレコードには、フォームBという名前のフィールドはありません。」となってしまいます。 フィールド名ではなくフォームB全体を更新したいのですが、どうすればいいでしょうか? フォームBは開いている状態です。

  • ACCESSのフォームとサブフォームについて

    いつもみなさんにはお世話になっております。 ACCESS2000を使用しています。 テーブルA,B,Cを用意しフォームにサブフォーム、リストボックス、ボタンを配置し、リストボックスの表示内容(A,B,C)に合わせてボタンクリックでサブフォームの表示テーブル(A,B,C)を変更したいのですがどうしたら良いのか解りません。 みなさんどうかよろしくお願いします。

  • AC2000でフォームから入力したデータをサブフォームに表示

    ID 商品名 単位 単価で商品マスタフォームを作っています。このフォーム内にサブフォームを作っておいて データが入力するたびにサブフォームへ表示させたいのですが、このときの条件としてID(オートナンバー)を降順(最新のデータが一番上になる)・データシート形式にしたいと思います。 T_商品(テーブル名) Q_商品(IDを降順としたクエリ) MF_商品(各入力テキストボックスがあるフォーム) SF_商品(MF_商品に貼り付けるサブフォーム) 降順にすると一番若いIDのデータだけがサブフォームに 表示されるのです。 requeryは必要なのでしょうか? よろしくお願い致します。