- ベストアンサー
Access2007でサブフォームを再クエリする方法
- Access2007で以前作成したマクロを実行する際に問題が発生しています。特に(4)キー送信が動かず、サブフォームにデータが表示されません。
- 2000でのマクロと2007での状況を比較すると、再クエリボタンのコントロール名が異なることが分かります。
- マクロ内の(4)キー送信を再クエリボタンのコントロール名に変更すれば、問題は解決するかもしれません。
- みんなの回答 (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です。 (『その他』タブに『名前』がない場合は、コントロールとしてのサブフォーム ではなく、その『ソース オブジェクト』に指定しているフォームのプロパティ が表示されているので、サブフォームの外枠が強調表示(オレンジ)に なるように、選択し直してください: サブフォームの外側でマウスクリック後、内側に向かってドラッグしてから マウスボタンを離せば、サブフォームが選択されます)
その他の回答 (1)
- DexMachina
- ベストアンサー率73% (1287/1744)
> このマクロをどう直したらいいでしょうか。 Access2000では動いていた、という点が若干引っ掛かってはいるのですが・・・(汗) (原因の推測を誤っている可能性がある、と) とりあえず、『キー送信』アクション(VBAではSendKeysに相当)は動作が不安定に なりますので、『再クエリ』アクションの使用をお勧めします。 なお、再クエリを試された際に出たエラーは、恐らく「実行時にフォーカスを持っている フォームに、該当するコントロールがない」ために発生しています。 (まだフォームA上にフォーカスがあるため、フォームAで「sub_form」を探した、と) ですので、「(4)」以降のアクションを以下のようにすれば、ご希望の動作になるのでは ないかと思います: (4)オブジェクトの選択 ・オブジェクトの種類: フォーム ・オブジェクト名: フォームB ・データベース ウィンドウ内: いいえ (5)再クエリ ・コントロール名: sub_form ・・・以上です。
お礼
丁寧なご回答ありがとうございます。 お礼が遅くなってすみません。 今試してみたのですが、やはり「カレントレコードには~」というメッセージが表示されてしまいます。 他に再クエリの名前を、配置した名前「sub_form」ではなく、 サブフォームの名前(保管名)に変えてみたのですが、同様のメッセージがでてしまいます。 マクロだけで、この動作をさせるのは難しいのでしょうか。
お礼
DexMachina様 できました。 ご指摘の通り、フォームBを開くとサブフォームに最初にタブ移動するようになっていました。 入力フォームのときは注意するんですが、閲覧フォームでも「タブ移動順」は大切なんですね。 詳しく書いていただけたので、迷わず変更できました。 わざわざ同じようなものを作って動作確認までしていただき、本当にありがとうございました。 どうぞ良い年を!