宜しくお願いします。
仕様環境:WinVISTA Access2007
別フォームから別フォームへの再クエリの仕方を教えてください。
画像を貼らせて頂きます。
まず、後ろのメインフォームから新規作成ボタンを押して、
別のフォーム(作成画面)を開きます。
そこに新しいデータを入力して、閉じますと、
そのままではメインフォームには反映しません。
(テーブルには反映していますが)
別フォーム(新規の作成画面)に再クエリをかけても
そのフォームが更新させるだけで、メインフォームに変化はありません。
ちなみにメインフォームに作った更新ボタン(中身は再クエリ)を押すと反映されます。
どうしたら別フォームから後ろのメインフォームを再クエリ(更新)できるのでしょうか?
やりたいことは別フォームのOKボタン(画像参照)を押すと
別フォームが閉じると同時にメインフォームが再クエリ(更新)されるとベストです。
(今のところOKボタンの中身は”閉じる”のマクロだけです)
構造は簡単で恐縮ですが、
テーブル:Tメイン
フォーム:メインフォーム
作成画面フォームetc..
です。
クエリはメインフォーム自体にクエリビルダを使っていますが、
特別な施しなどはしていません、うまく動作しないところがあって、
いろいろ調べていてそうすると改善すると書いてあったので。。
ちなみにテーブルには「日付」の後順で並び替えをかけています。
当方、VBAに弱いのでマクロで操作できるのでしたらお願いします。
マクロで出来ないものでしたらVBAを教えて頂ければ、
イベントプロシージャに書き込みます。
大変恐縮ですがお知恵をお貸しください、宜しくお願いします。
No.3ベストアンサー
- 回答日時:
連投すみません。
・・というか、私も「削除されました」というのを見て一旦中止してました。
(中止した場合も含めて、回答はメモ帳で保存しているので無事でしたが)
> どうしたら別フォームから後ろのメインフォームを再クエリ(更新)できるのでしょうか?
マクロの場合は、「オブジェクトの選択」アクションで対象フォームを選択した後、
「再クエリ」アクションを行えばOkです。
なお、「作成画面」フォームも連結フォーム(レコードソースが指定されたフォーム)と
いう前提で作成しました。
【1行目】
アクション: 閉じる
オブジェクトの種類: フォーム
オブジェクト名: 作成画面
オブジェクトの保存: 確認
※今回の内容・順序では、オブジェクトの種類と名前は空白でも可。
(指定なしの場合、現在のフォームが閉じられるので)
【2行目】
アクション: オブジェクトの選択
オブジェクトの種類: フォーム
オブジェクト名: メインフォーム
データベース ウィンドウ内: いいえ
【3行目】
アクション: 再クエリ
コントロール名: (空白のままにします)
<解説>
メインフォームを再クエリする前に、作成画面側のデータを保存してやる必要が
あります。
ここでは、「閉じる」アクションによって、実質的なレコード保存を行っています。
順序を逆(オブジェクトの選択→再クエリ→閉じる)では、メインフォームには
反映されないのでご注意下さい。
この回答への補足
回答ありがとうございます。
(何度か削除してしまいごめんなさい、書き方に納得がいかなかったもので。。)
できました!
自分なりの理解(解釈)ですが、
1行目で作成画面を閉じて、2行目でメインフォームの再クエリの
準備をするわけですね
オブジェクト:
データや操作の集まり。つまりモジュールより大きな枠組みみたいな感じですか、
端的にいうとテーブルやクエリ、フォームといった。
(この場合は再クエリしたいフォーム、つまり、メインフォーム)
そして3行目で、再クエリと。
ありがとうございます!
そしてこの回は何やら、VBAに慣れるのに最適な問いな
気がしますので、もう少し続けます。
何かありましたら宜しくお願いします。
(今日はもう休みます。)
No.5
- 回答日時:
No.3です。
> 1行目で作成画面を閉じて、2行目でメインフォームの再クエリの
> 準備をするわけですね
(中略)
> そして3行目で、再クエリと。
おおすじで、それでOKなのですが、No.3の末尾に書いた「<解説>」部分の読み
込みが不足されているようです。
No.2の方のVBAと、No.3のマクロとでは、「閉じる/Close」と「再クエリ/Requery」
の順序が逆になっています。
そのため、レコードが保存されていない状態でOkボタンを押すと、No.1・2の補足
欄に書かれたように、「Requeryをしても反映されない」という結果になります。
(ちなみに、作成画面のOkボタンを押す直前の状態でテーブルを見てもらえば、
そこではまだテーブルにも反映されていないことを確認できます)
※作成画面に保存ボタンを設置して押すか、可能なら別のレコードに移動した
場合は、「Requery→Close」の順でも反映されます。
「1行目で閉じることによって、再クエリ実行時にはレコードが保存済みになる」、
このことが重要です。
ですので、VBAの場合でも、マクロと同様に、先にCloseを行ってからRequeryと
してやれば、「作成画面」で登録しようとしたレコードがメインフォームに反映される
ようになります。
Private Sub Ok_Click()
DoCmd.Close acForm, "作成画面"
Forms!メインフォーム.Requery
End Sub
また、別のやり方として、閉じる/Closeによる自動保存に頼る代わりに、明示的に
レコードを保存する、というのもあります。
これであれば、RequeryをCloseの前においても、メインフォームに新規レコードを
反映させることができます。
こちらの場合は、Requeryの前に「DoCmd.RunCommand acCmdSaveRecord」
を追加します。
Private Sub Ok_Click()
DoCmd.RunCommand acCmdSaveRecord
Forms!メインフォーム.Requery
DoCmd.Close acForm, "作成画面"
End Sub
> 「acForm」というのがいくら調べてもわかりません
マクロで「閉じる」アクションを選択してみると、画面左下に、「オブジェクトの種類」
という欄があり、そこのリストに「テーブル」「フォーム」などが並んでいると思います。
「acForm」というのは、そこの「フォーム」と同じ意味です。
実際には、「DoCmd.Close 0」ならテーブルを、「DoCmd.Close 2」ならフォームを
それぞれ閉じる、という意味になるのですが、ただの数値では非常に覚えにくいし
後から見直してもわかりにくい、ということで、VBAの中で「0」や「2」の代わりに
使える定数として、「acTable」や「acForm」などが予め組み込まれています。
(MsgBoxで表示ボタンの種類を指定で使用する「vbOkOnly」(=0・Okボタンのみ)や、
MsgBoxで選んだボタンを返す「vbCancel」(=2・キャンセルボタンを選択)等の
組み込み定数などもあります:
頭が「ac」のものはAccessで、「vb」のものは(Excel等も含めた)VBAで、
それぞれ定義されているもの)
・・・この辺りの定数は、全てを覚えるとなると大変ですが、VBA内にそれを補助する
機能(→添付画像:「Close」の後に半角スペースを入力すると表示)もありますし、
相当するマクロアクションをVBAに変換してやるという手もありますので、あまり気に
しない方がいいと思います(汗)
回答ありがとうございます。
読み込み不足についてご指摘いただきありがとうございました。
なにぶん、一人で本を読んだり、ネットで調べたりしてやってるので、
そういう指摘はありがたいです。(怖いのは嫌ですが・笑)
気付かせていただくことが多々あり勉強になります。
今回で言えば「順序」ですね。
「閉じる(自動保存として)」→「再クエリ」
これはマクロであってもVBAであっても同じという風に考えたら、
今まで「仕掛け」関係はマクロで作っていたのですが、
あらためて持っているVBAの本(といってもマクロと込みですが)を
見直すともっと気楽に読めるようになり、頭に入り易くなりました。
簡単な処理なら今でもVBAで作れそう気がしてきました。
また前に作った簡単なデータベースでも保存時の
不具合があって、謎になっていたのですが、少し解明されてきました。
もう一捻りすればそちらも改善に至るでしょう。
丁寧な解説と回答ありがとうございました!
No.2
- 回答日時:
別フォームのOKボタンのイベントプロシージャに(マクロをやめて)
Forms!メインフォーム.Requery
DoCmd.Close acForm, "別フォーム名"
と記載してみてください
この回答への補足
回答ありがとうございます。
しかし残念、できませんでした・・。
ただ、これを気にマクロを深めるのとともにVBAに慣れるのに
挑戦したいと思います、もし宜しければお付き合いください。
状況はといいますと、
まず、メインフォームの標題は「メインフォーム」という名前で
別フォームの標題が「作成画面」という名前で
OKボタンの標題・名前ともに「OK」です。
クリック時にイベントプロシージャに選択して
VBエディターを開き、コード作成画面の
一番上の太文字には「OK」と「Click」とあります。
そしてその下に、
---------------------
Private Sub OK_Click()
Forms!メインフォーム.Requery
DoCmd.Close acForm, "作成画面"
End Sub
---------------------
と入力しました。
が、テーブルには反映しましたが、
フォームには反映しませんでした。
ちなみにメインフォームには再クエリマクロで作った
「更新」ボタンがありますので、それを押すと
作成画面で作ったデータが反映されました。
気になるところと言えば、
メインフォームのレコードソースが、
SELECT Tメイン.ID, Tメイン.顧客番号, Tメイン.名前, Tメイン.住所, Tメイン.日付 FROM Tメイン;
となっているところです。
何か関係があるでしょうか?
何かございましたら宜しくお願いします。
(今日はもう休みます。)
No.1
- 回答日時:
回答入れようかとしたら消えてたのであせりました。
メインフォームがアクティブになった時に、再クエリしてみてはいかがでしょうか。
(まずは、この状態での動作を確認してみてください)
※メインフォームのアクティブ時イベントで、再クエリします。
※メインと作成画面フォームetcを並列で表示していて、
変更の都度更新が必要ということになりますか。
であれば、VBAが簡単かと。。。
この回答への補足
回答ありがとうございます。
(何度か削除してしまいごめんなさい、書き方に納得がいかなかったもので。。)
この回は何やらVBAに慣れるのに最適だと思いますので、
何かご意見がございましたらお付き合いください。
詳細は、kmetuさんのところに書かせて頂きました。
まず、メインフォームに再クエリで作った「更新」ボタンを設置してまして、
これを押すと作成画面で作ったデータが反映されます。
メインフォームのみの状態→これがアクティブな状態ということで
宜しいでしょうか?
そしてコードはクリック時のイベントプロシージャで
---------------------
Private Sub OK_Click()
Forms!メインフォーム.Requery
DoCmd.Close acForm, "作成画面"
End Sub
---------------------
と入力しました。
しかし、ダメでした・・(テーブルには反映したもののフォームには反映されず)。
また「DoCmd.Close」は「閉じる・アクション」ということで理解しましたが
(DoCmd→何かアクションを起こす時に頭につけて使うもの。)
「acForm」というのがいくら調べてもわかりません、
もし宜しければ教えてください、お願いいたします。
(今日はもう休みます)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
それもChatGPT!?と驚いた使用方法を教えてください
仕事やプライベートでも利用が浸透してきたChatGPTですが、こんなときに使うの!!?とびっくりしたり、これは画期的な有効活用だ!とうなった事例があれば教えてください!
-
おすすめの美術館・博物館、教えてください!
美術館・博物館が大好きです。みなさんのおすすめをぜひお聞きしたいです。
-
自分独自の健康法はある?
こうしていると調子がいい!みたいな自分独自の健康法、こだわりはありますか?
-
AIツールの活用方法を教えて
みなさんは普段どのような場面でAIツール(ChatGPTなど)を活用していますか?
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
Access サブフォームでの選択行の取得
その他(データベース)
-
AccessのRefresh・Requery・Repaintの違い
Access(アクセス)
-
-
4
アクセス フォームをリクエリしたい
Access(アクセス)
-
5
Accessでのサブフォーム内の再クエリについて
Access(アクセス)
-
6
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
7
テキストボックスにクエリ結果を表示させたい
その他(データベース)
-
8
テーブル1にマクロで再クエリはできないのか?
Access(アクセス)
-
9
Accessで別テーブルの値をフォームに表示したい
その他(データベース)
-
10
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
11
アクセスで#エラーを表示させない方法は?
Access(アクセス)
-
12
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
13
ACCSESS2013VBA フォームのレコードソースを変更する
その他(データベース)
-
14
ACCESS フォームからサブフォームのデータを更新・入力したい
Access(アクセス)
-
15
Accessのフォーム上にレコード数とレコード番号の表示
その他(データベース)
-
16
access別のテーブルを参照してテキストボックスに値を表示、編集したい
Access(アクセス)
-
17
Accessで、フォームからフォームへ値を引き継ぐやり方
Access(アクセス)
-
18
ACCESSのフォーム、開くんですが、見えないようにするには
Access(アクセス)
-
19
親・子リンクフィールドの設定は、どうすればよいのでしょうか。
その他(Microsoft Office)
-
20
accessでクエリをExcelにエクスポートする時にファイル名に日付を追加したい
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・ことしの初夢、何だった?
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access 別フォームへの再クエ...
-
選択したチェックボックスのみ...
-
ACCESSで入力フォームをHTMLフ...
-
Access2002 フォームを閉じるた...
-
アクセスのフォームのビューが...
-
Accessのフォーム上にレコード...
-
テキストボックス(アクセス)内...
-
Access フォーム上でコンボボッ...
-
ACCESSのフォームからデータの...
-
「バインド」、「ドッキング」...
-
Accessのフォームで作業領域を...
-
accessの自動更新処理をできな...
-
access 非連結のサブフォームの...
-
ACCESSフォームでのレコード数...
-
Access2000 テキストボックス...
-
ACCESS フォームにデータ入力で...
-
Accessのフォームに表示...
-
ADOでRecordsetオブジェクトを...
-
入力途中の入力した値をすべて...
-
テーブルに主キーを作らないデ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESSのフォームからデータの...
-
アクセスのフォームのビューが...
-
Accessのフォーム上にレコード...
-
accessの自動更新処理をできな...
-
選択したチェックボックスのみ...
-
ACCESSで入力フォームをHTMLフ...
-
Access 別フォームへの再クエ...
-
アクセスでテーブルの変更内容...
-
アクセスでの項目追加について...
-
アクセス 0以外をカウントす...
-
ADOでRecordsetオブジェクトを...
-
Access2002 フォームを閉じるた...
-
他フォームのチェックボックス...
-
Accessのハイパーリンクのパス...
-
入力途中の入力した値をすべて...
-
Accessのフォームで作業領域を...
-
帳票フォームに全レコードを表...
-
Access フォーム上でコンボボッ...
-
Accessフォームのテキストボッ...
-
ACCESSフォームでのレコード数...
おすすめ情報