• ベストアンサー

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

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

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

以下のようにすると、意図した動作になると思います: DoCmd.Close acForm, "フォームA" Forms!フォームB.Requery ※「Forms!フォームB.Requery」は  「Forms("フォームB").Requery」としてもOk。  (「""」の有無に注意してください) フォームのリクエリに「DoCmd.Requery」を使用することも できますが、その場合は対象フォームの指定は引数では なく(→この引数は特定のコントロールだけをリクエリしたい 場合に、そのコントロール名を指定するためのものです)、 フォームへのSetFocusで対応することになります。 (但し、上記に比べて、メリットはありません:  Access2007以前の機能で、VBAを直接組むのでは  なく、マクロからの変換でVBAにした場合、このメソッドが  使用されたりします) DoCmd.Close acForm, "フォームA" Forms!フォームB.SetFocus DoCmd.Requery

MOUELHZOLXOYM
質問者

お礼

ありがとうございます。

関連するQ&A

  • ACCESS フォームからフォームへの連携

    例えば  A_テーブル(フィールド:会員NO・顧客名・連絡  先)でのA_フォーム上でコマンドボタン「B」を  作成しています。ボタンをクリックすると   Docmd. OpenForm"B_フォーム" が実行されます。  実行され新しく開いた  B_フォーム(フィールド:管理NO・会員NO・備考) の会員NOの中に、その時開いていたA_テーブルの会 員NOが入っている状態にすることは可能でしょう  か? 乱文で大変申し訳ありません。 現在顧客管理のデータベースを作りはじめましたが なにぶん手探り状態ですので、今後ともよろしくお 願いいたします。 ( WindowsXP : Access2000)

  • 【ACCESS】フォームのレコードソースのクエリを動的に書き直したときの、フォームの再描画

    ACCESS2002 帳票フォームのレコードソースにクエリを指定しています。 フォーム上のコマンドボタンを押したイベントで、その レコードソースとしているクエリのSQLを書き直しています。 問題は、その書き直したクエリをもとにして画面をもう一度 表示させなおしたい(リフレッシュさせたい)ということです。   docmd.close acForm,"フォーム名"   docmd.open "フォーム名" とすると、書き直したクエリの内容でフォームが表示されます。 フォームを閉じる→フォームを開くとしないで、フォームを リフレッシュさせる方法はないのでしょうか?

  • Accessであいまい検索するフォームをつくってみたんですが?

    Accessの初心者です。 本などをみながらあいまい検索ができるようなフォームをつくってみましたがフォームを開いた時、全レコードが表示されてしまいます。 クエリーの抽出条件はLike "*" & Forms!フォーム1!テキスト0 & "*"にしてテキストボックスプロパティの更新後処理でDoCmd.Requeryとしました。(意味がよくわからないんですけど) フォームを開いた時やテキストボックスになにも入力されていない時、全レコードが表示されないようにするにはどうすればいいのでしょうか? よろしくお願いします。

  • 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つのフォームでの処理ができません。 拙い説明ですがどなたかご教授願います。

  • access フォームについて

    access2003にて登録フォームを作成しています。 このフォーム内に入力したデータを登録ボタンを押し、「登録しますか」のメッセージに 「いいえ」とすれば保存せずにこのフォームを閉じる。 「キャンセル」とすれば保存せずにフォームに戻る。 「はい」とすれば保存して閉じたいです。 しかし、以下の式を実行すると 「いいえ」はバッチリ希望通りに動くのですが、 「キャンセル」をすると保存されてフォームに戻り、 「はい」とすると保存されずにフォームが閉じられてしまいます。 何がまずいのでしょうか・・・。 ----- Private Sub Form_BeforeUpdate(Cancel As Integer) Dim Ret As Integer Ret = MsgBox("登録しますか?" & vbCrLf & " " & vbCrLf & "「いいえ」を選択すると保存せず閉じます", vbYesNoCancel) '「いいえ」を選択したら、保存せずに閉じる If Ret = vbNo Then DoCmd.Close acForm, "振返りデータ", acSaveNo '「キャンセル」を選択したら、保存せずにフォームに戻る Else If Ret = vbCancel Then Else DoCmd.Close acForm, "振返りデータ", acSaveYes End If End If End Sub

  • エスケープキーを押して、フォームを閉じるには?

    アクセスのフォームを、エスケープキーを押して、フォームを閉じるにはどうすればいいでしょうか? DoCmd.Close acForm, フォーム名 で閉じることは分かったのですが、「エスケープキーを押したら」とする方法を教えてください。

  • Access2000でのレコードの削除と移動

    ccess2000で テーブルがA と Bあり テーブルAは一時保存用で最終的にBに保存しようとしてます。 まず、データをフィールド1が空欄でAに保存して、後にそのデータをフォームで呼び出し、フィールド2を入力後テーブルBに保存その呼び出したカレントレコードのみ削除したいのですが、どうすればいいのでしょうか> フォームは連結されていません。 可能であればサンプルコードをいただくと助かります。 お願い致します。

  • アクセス2002 VBA

    フォームを保存せずに閉じたいのですが、 当該フォームの「閉じる時」プロパティーにイベントプロシージャを設定し、 Private Sub Form_Close() DoCmd.Close acForm, "フォーム1", acSaveNo End Sub と記述しました。  ところが、実行すると 「Close アクションの実行はキャンセルされました。」とエラーになってしまいました。  間違いの指摘をお願いします。

  • アクセス フォームの設定

    テーブル【T-1】 フィールドA,主キー,数値型 フィールドB,テキスト型 フィールドC,テキスト型 フィールドD,テキスト型 フィールドE,テキスト型 フォーム【F-1】 テーブル【T-1】に入力用のフォーム,単票型 があります。 F-1でそれぞれのフィールドに対して入力スペースがあり(もちろんですが) A,B,C,D,Eと順番に入力していきます。 ここでエンターキーを押すと、次のレコードへ移るわけですが、 カーソルがEの位置にあるため、わざわざマウスでAの位置へ移動させないといけません。 同様に、入力項目がなく、A,B,Cと入力して次のレコードへ行くと、Cの位置にカーソルがあります。 これを、Aをホームポジションとして、次のレコードへ移ったときに 自動的にカーソルをAの位置にもってくるようにしたいのですが、 一体どうすればよろしいでしょうか?

  • access2007 フォームについて

    フォームで「グループ化の設定」はできるのでしょうか? 初心者ですが、よろしくお願いします。 例)テーブル(レコードソース) フィールド1 ,フィールド2 日本     ,ハンバーグ 日本     ,お好み焼き 日本     ,(Null ) アメリカ   ,スパゲッティ アメリカ   ,ハンバーグ アメリカ   ,ビール フランス   ,(Null ) フランス   ,(Null ) フランス   ,(Null ) ※フィールド1は必ず3レコードあると想定しまして、、 ↓ フォーム(1レコード目) 日本   ハンバーグ      お好み焼き      (Null ) フォーム(2レコード目) アメリカ スパゲッティ      ハンバーグ      ビール フォーム(3レコード目) フランス (Null )      (Null )      (Null ) ※Null 値に対し、レコードの更新を行いたく、また、実際にはフィールド1が30レコードずつあるため、グループ化設定を行い効率的なフォームを作りたいのですが、、、 分かりにくいかもしれませんが、ご教示下さい。

専門家に質問してみよう