• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Access2007でサブフォームを再クエリする)

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

このQ&Aのポイント
  • Access2007で以前作成したマクロを実行する際に問題が発生しています。特に(4)キー送信が動かず、サブフォームにデータが表示されません。
  • 2000でのマクロと2007での状況を比較すると、再クエリボタンのコントロール名が異なることが分かります。
  • マクロ内の(4)キー送信を再クエリボタンのコントロール名に変更すれば、問題は解決するかもしれません。

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

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

No.1です。 > マクロだけで、この動作をさせるのは難しいのでしょうか。 すみません、前回の回答では動作確認をしていませんでした(汗) 改めてAccess2007/WindowsXP(Home)の環境で動作確認をした結果、 多分(汗)、そちらと同じ状況を再現できました。 (Access2000については不明) フォームBを直接開いた場合、最初にカーソルがある(=フォーカスがある)のは サブフォーム、という状態になっているのではないでしょうか。 この場合、再クエリで『コントロール名』引数を指定すると、サブフォームの中で その名前のコントロールを探すことになるため、ご質問のエラーとなります。 (なお、前回回答で追加してもらった「オブジェクトの選択」は、上記の推測が  正しければ不要のようです(汗)) ですので、対応としては、  a)『再クエリ』アクションの『コントロール名』を空白にする   (→フォームB全体に対して再クエリが行われます)  b)フォームBで、最初にフォーカスがあたるコントロールを、サブフォーム以外   になるようにする  c)(上記の方法で支障がある場合:サブフォームが2つあって、一方は更新   したくない、など)   『再クエリ』の前に『コントロールの移動』アクションを追加し、その引数に   フォームBだけに存在するコントロールの名前を指定する の3通りの方法が考えられます。 なお、コントロールの移動順については、以下の方法で変更できます。 (数値を直接編集すると並び順がおかしくなるため注意:  但しAccess97での経験に基づいての話で、Access2007では未確認(汗)) 1)当該フォーム(フォームB)をデザインビューで開く 2)サブフォームをダブルクリックするなどしてプロパティシートを開き、『その他』タブ  の『タブ移動順』にカーソルを移動 3)右端に「...」(ビルダ)ボタンが表示されるので、そこをクリック 4)『タブ オーダー』ダイアログが開くので『タブ オーダーの設定』欄内で、ドラッグ  &ドロップで並び順を入れ替え 5)『OK』ボタンをクリックして上記ダイアログを閉じる ・・・以上です。 なお、 > 他に再クエリの名前を、配置した名前「sub_form」ではなく、 > サブフォームの名前(保管名)に変えてみた については、サブフォームのプロパティシートで、『その他』タブの『名前』に 表示されるものを使用すればOkです。 (『その他』タブに『名前』がない場合は、コントロールとしてのサブフォーム  ではなく、その『ソース オブジェクト』に指定しているフォームのプロパティ  が表示されているので、サブフォームの外枠が強調表示(オレンジ)に  なるように、選択し直してください:  サブフォームの外側でマウスクリック後、内側に向かってドラッグしてから  マウスボタンを離せば、サブフォームが選択されます)

kiukiu5315
質問者

お礼

DexMachina様 できました。 ご指摘の通り、フォームBを開くとサブフォームに最初にタブ移動するようになっていました。 入力フォームのときは注意するんですが、閲覧フォームでも「タブ移動順」は大切なんですね。 詳しく書いていただけたので、迷わず変更できました。 わざわざ同じようなものを作って動作確認までしていただき、本当にありがとうございました。 どうぞ良い年を!

その他の回答 (1)

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

> このマクロをどう直したらいいでしょうか。 Access2000では動いていた、という点が若干引っ掛かってはいるのですが・・・(汗) (原因の推測を誤っている可能性がある、と) とりあえず、『キー送信』アクション(VBAではSendKeysに相当)は動作が不安定に なりますので、『再クエリ』アクションの使用をお勧めします。 なお、再クエリを試された際に出たエラーは、恐らく「実行時にフォーカスを持っている フォームに、該当するコントロールがない」ために発生しています。 (まだフォームA上にフォーカスがあるため、フォームAで「sub_form」を探した、と) ですので、「(4)」以降のアクションを以下のようにすれば、ご希望の動作になるのでは ないかと思います: (4)オブジェクトの選択  ・オブジェクトの種類: フォーム  ・オブジェクト名: フォームB  ・データベース ウィンドウ内: いいえ (5)再クエリ  ・コントロール名: sub_form ・・・以上です。

kiukiu5315
質問者

お礼

丁寧なご回答ありがとうございます。 お礼が遅くなってすみません。 今試してみたのですが、やはり「カレントレコードには~」というメッセージが表示されてしまいます。 他に再クエリの名前を、配置した名前「sub_form」ではなく、 サブフォームの名前(保管名)に変えてみたのですが、同様のメッセージがでてしまいます。 マクロだけで、この動作をさせるのは難しいのでしょうか。

関連するQ&A