宜しくお願いします。
仕様環境:WinVISTA Access2007
別フォームから別フォームへの再クエリの仕方を教えてください。
画像を貼らせて頂きます。
まず、後ろのメインフォームから新規作成ボタンを押して、
別のフォーム(作成画面)を開きます。
そこに新しいデータを入力して、閉じますと、
そのままではメインフォームには反映しません。
(テーブルには反映していますが)
別フォーム(新規の作成画面)に再クエリをかけても
そのフォームが更新させるだけで、メインフォームに変化はありません。
ちなみにメインフォームに作った更新ボタン(中身は再クエリ)を押すと反映されます。
どうしたら別フォームから後ろのメインフォームを再クエリ(更新)できるのでしょうか?
やりたいことは別フォームのOKボタン(画像参照)を押すと
別フォームが閉じると同時にメインフォームが再クエリ(更新)されるとベストです。
(今のところOKボタンの中身は”閉じる”のマクロだけです)
構造は簡単で恐縮ですが、
テーブル:Tメイン
フォーム:メインフォーム
作成画面フォームetc..
です。
クエリはメインフォーム自体にクエリビルダを使っていますが、
特別な施しなどはしていません、うまく動作しないところがあって、
いろいろ調べていてそうすると改善すると書いてあったので。。
ちなみにテーブルには「日付」の後順で並び替えをかけています。
当方、VBAに弱いのでマクロで操作できるのでしたらお願いします。
マクロで出来ないものでしたら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.3ベストアンサー
- 回答日時:
連投すみません。
・・というか、私も「削除されました」というのを見て一旦中止してました。
(中止した場合も含めて、回答はメモ帳で保存しているので無事でしたが)
> どうしたら別フォームから後ろのメインフォームを再クエリ(更新)できるのでしょうか?
マクロの場合は、「オブジェクトの選択」アクションで対象フォームを選択した後、
「再クエリ」アクションを行えばOkです。
なお、「作成画面」フォームも連結フォーム(レコードソースが指定されたフォーム)と
いう前提で作成しました。
【1行目】
アクション: 閉じる
オブジェクトの種類: フォーム
オブジェクト名: 作成画面
オブジェクトの保存: 確認
※今回の内容・順序では、オブジェクトの種類と名前は空白でも可。
(指定なしの場合、現在のフォームが閉じられるので)
【2行目】
アクション: オブジェクトの選択
オブジェクトの種類: フォーム
オブジェクト名: メインフォーム
データベース ウィンドウ内: いいえ
【3行目】
アクション: 再クエリ
コントロール名: (空白のままにします)
<解説>
メインフォームを再クエリする前に、作成画面側のデータを保存してやる必要が
あります。
ここでは、「閉じる」アクションによって、実質的なレコード保存を行っています。
順序を逆(オブジェクトの選択→再クエリ→閉じる)では、メインフォームには
反映されないのでご注意下さい。
この回答への補足
回答ありがとうございます。
(何度か削除してしまいごめんなさい、書き方に納得がいかなかったもので。。)
できました!
自分なりの理解(解釈)ですが、
1行目で作成画面を閉じて、2行目でメインフォームの再クエリの
準備をするわけですね
オブジェクト:
データや操作の集まり。つまりモジュールより大きな枠組みみたいな感じですか、
端的にいうとテーブルやクエリ、フォームといった。
(この場合は再クエリしたいフォーム、つまり、メインフォーム)
そして3行目で、再クエリと。
ありがとうございます!
そしてこの回は何やら、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も見ています
-
あるあるbotに投稿したけど採用されなかったあるある募集
あるあるbotに投稿したけど採用されなかったあるあるをこちらに投稿してください
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
AccessのRefresh・Requery・Repaintの違い
Access(アクセス)
-
アクセス フォームをリクエリしたい
Access(アクセス)
-
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
-
4
Access サブフォームでの選択行の取得
その他(データベース)
-
5
アクセスで#エラーを表示させない方法は?
Access(アクセス)
-
6
前のレコードの値を自動で入れたい
PowerPoint(パワーポイント)
-
7
Accessで、フォームからフォームへ値を引き継ぐやり方
Access(アクセス)
-
8
テーブル1にマクロで再クエリはできないのか?
Access(アクセス)
-
9
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
10
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
11
Accessでのサブフォーム内の再クエリについて
Access(アクセス)
-
12
ACCESS フォームからサブフォームのデータを更新・入力したい
Access(アクセス)
-
13
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
14
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
15
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
16
Accessのフォームにて、詳細行のボタンを行の内容により、表示/非表
その他(Microsoft Office)
-
17
ACCSESS2013VBA フォームのレコードソースを変更する
その他(データベース)
-
18
accessでクエリをExcelにエクスポートする時にファイル名に日付を追加したい
Access(アクセス)
-
19
ACCESSでデータ読み取り専用を解除する方法
その他(データベース)
-
20
このオブジェクトに値を代入することはできません
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
選択したチェックボックスのみ...
-
Access2002 フォームを閉じるた...
-
ACCESSのフォームからデータの...
-
Accessフォームのテキストボッ...
-
アクセスでの項目追加について...
-
Accessのフォーム上にレコード...
-
Access2000で起動時にフォーム...
-
アクセスのフォームのビューが...
-
「メソッドまたはデータメンバ...
-
ACCESS(アクセス):一度の入力で...
-
accessの自動更新処理をできな...
-
Access フォーム上でコンボボッ...
-
Accessのフォームに表示...
-
ACCESSでテーブルから選択,表示...
-
Accessが不良です
-
Access 別フォームへの再クエ...
-
Access2000 テキストボックス...
-
アクセスでのチェックリスト
-
写真入りデータベースの作成
-
アクセス:フォームを閉じずに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESSのフォームからデータの...
-
Accessのフォーム上にレコード...
-
アクセスのフォームのビューが...
-
accessの自動更新処理をできな...
-
Access 別フォームへの再クエ...
-
選択したチェックボックスのみ...
-
アクセスでテーブルの変更内容...
-
ACCESSで入力フォームをHTMLフ...
-
「メソッドまたはデータメンバ...
-
アクセスでの項目追加について...
-
Accessフォームのテキストボッ...
-
アクセス 0以外をカウントす...
-
Accessのフォームで作業領域を...
-
Access2002 フォームを閉じるた...
-
ADOでRecordsetオブジェクトを...
-
Accessのハイパーリンクのパス...
-
Access フォーム上でコンボボッ...
-
ACCESS フォームにデータ入力で...
-
入力途中の入力した値をすべて...
-
ACCESSでのテキストボックスの...
おすすめ情報