==環境==
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'という名前のフィールドはありません。」
と表示されてしまいました。
このマクロをどう直したらいいでしょうか。
皆さん、よろしくお願いいたします。
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です。
(『その他』タブに『名前』がない場合は、コントロールとしてのサブフォーム
ではなく、その『ソース オブジェクト』に指定しているフォームのプロパティ
が表示されているので、サブフォームの外枠が強調表示(オレンジ)に
なるように、選択し直してください:
サブフォームの外側でマウスクリック後、内側に向かってドラッグしてから
マウスボタンを離せば、サブフォームが選択されます)
DexMachina様
できました。
ご指摘の通り、フォームBを開くとサブフォームに最初にタブ移動するようになっていました。
入力フォームのときは注意するんですが、閲覧フォームでも「タブ移動順」は大切なんですね。
詳しく書いていただけたので、迷わず変更できました。
わざわざ同じようなものを作って動作確認までしていただき、本当にありがとうございました。
どうぞ良い年を!
No.1
- 回答日時:
> このマクロをどう直したらいいでしょうか。
Access2000では動いていた、という点が若干引っ掛かってはいるのですが・・・(汗)
(原因の推測を誤っている可能性がある、と)
とりあえず、『キー送信』アクション(VBAではSendKeysに相当)は動作が不安定に
なりますので、『再クエリ』アクションの使用をお勧めします。
なお、再クエリを試された際に出たエラーは、恐らく「実行時にフォーカスを持っている
フォームに、該当するコントロールがない」ために発生しています。
(まだフォームA上にフォーカスがあるため、フォームAで「sub_form」を探した、と)
ですので、「(4)」以降のアクションを以下のようにすれば、ご希望の動作になるのでは
ないかと思います:
(4)オブジェクトの選択
・オブジェクトの種類: フォーム
・オブジェクト名: フォームB
・データベース ウィンドウ内: いいえ
(5)再クエリ
・コントロール名: sub_form
・・・以上です。
丁寧なご回答ありがとうございます。
お礼が遅くなってすみません。
今試してみたのですが、やはり「カレントレコードには~」というメッセージが表示されてしまいます。
他に再クエリの名前を、配置した名前「sub_form」ではなく、
サブフォームの名前(保管名)に変えてみたのですが、同様のメッセージがでてしまいます。
マクロだけで、この動作をさせるのは難しいのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Dlookupにエラーがでてしまう 1 2022/10/31 14:35
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- JavaScript ラジオボタンによるフォームの開閉を行いたい 3 2022/03/31 21:30
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Access(アクセス) Accessでセレクタをダブルクリックで別フォームで詳細表示 3 2022/12/20 10:36
- その他(Microsoft Office) Excelで総数量を変動させたい 2 2022/11/04 23:49
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
クエリで出来た表にチェックボ...
-
サブフォームに対してGoToRecor...
-
ACCESS VBA メインフォーム及び...
-
サブフォームを非表示させる方...
-
皆さん使っているブラウザを教...
-
親フォームからサブフォームの...
-
Access Dsum関数
-
Access VBA には Gridはないで...
-
ACCESSのフォームで列固定?
-
Access フォームで条件抽出し...
-
ACCESSにて
-
ACCESS──メインフォームでサブ...
-
ACCESSで条件によってサブフォ...
-
Accessでサブフォーム側の値の...
-
Accessで埋め込んだサブフォー...
-
サブフォームのあるフォームか...
-
Access SUMの結果が何もない時...
-
Access フォームを一つにまとめる
-
Access2007 ラベルの削除がで...
-
全てのサブフォーム名を取得したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
サブフォームに対してGoToRecor...
-
皆さん使っているブラウザを教...
-
クエリで出来た表にチェックボ...
-
ACCESS──メインフォームでサブ...
-
親フォームからサブフォームの...
-
親・子リンクフィールドの設定...
-
ACCESSにて
-
サブフォームを非表示させる方...
-
ACCESS VBA メインフォーム及び...
-
ACCESSのフォームで列固定?
-
Access フォームで条件抽出し...
-
Accessで埋め込んだサブフォー...
-
【Access】サブフォームのソー...
-
ACCESSサブフォームにデータ反...
-
アクセス2003のサブフォームの...
-
Access VBA には Gridはないで...
-
ACCESSのサブフォームコピーに...
-
サブフォームの高さをVBAで調整...
-
Access2007 ラベルの削除がで...
-
Access 登録ボタンからサブフォ...
おすすめ情報