- ベストアンサー
ACCESS VBA ウィンドウを閉じる
ACCESS VBA の初心者です。 前に進まず困っておりまして申し訳ありませんが教えてください。 フォーム1にボタンをつけそのボタンを押すとフォーム2に画面遷移するように、作っています。 フォーム2に画面遷移した場合、フォーム1は不要になるので、画面遷移と同時にフォーム1を閉じたいのですが、うまく行きません。 docmd.close と言う命令を使うとフォーム1のボタンを押すと画面遷移先のフォーム2の方が一瞬表示されてすぐに閉じてしまいます。 どうしたら、フォーム2が表示されてフォーム1が同時に閉じる事ができるでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
下記で、問題なくフォーム1から、フォーム2を開き、 フォーム1を閉じます。(Access2000で確認しました) 取り合えず、下記の最小限のフォームで、動作確認してみて下さい。 フォーム1、コマンドボタン1個 ----フォーム1の全コード---- Option Compare Database Option Explicit Private Sub コマンド0_Click() DoCmd.OpenForm "フォーム2" DoCmd.Close acForm, "フォーム1" End Sub --------------------------- フォーム2は空のフォーム --------------------------------------------------------- >何がいけないのでしょうか・・・。 推測ですが、フォーム1の「読み込み解除時」のイベントが怪しいかも。 このイベントで、閉じる事をキャンセル出来ます。 その他の原因については、現時点では思いつきません。(^^; もう少し詳しい情報を頂けたら、何か分かるかも・・・ --------------------------------------------------------- 原因を特定するためのアドバイス(その1) ・On Error Resume Next は使わない(もし使っていれば) ・ブレークポイントを設定する(F9) ・ステップ実行で1行ずつ実行する(F8) --------------------------------------------------------- 原因を特定するためのアドバイス(その2) まず、フォームのバックアップを取る。(コピーして貼り付け) 関係無いと思われる部分から、ソースを少しずつ削除する。 問題のボタンと、そのイベントプロシージャは残しますが、 その他のコントロールや、イベントプロシージャは削除していきます。 少し削除して、動作確認。少し削除して、動作確認。・・・ これを不具合がなくなるまで、繰り返します。 フォーム2に関しても、不要な部分を削除していきます。 不具合がなくなれば、その直前に削除した部分が怪しい。
その他の回答 (2)
チクッと同じような現象を再現してみました。 フォーム1: Option Compare Database Option Explicit Private Sub コマンド0_Click() On Error GoTo err_コマンド0 DoCmd.OpenForm "フォーム2" DoCmd.Close acForm, "フォーム1" Exit_コマンド0_Click: Exit Sub err_コマンド0: Resume Exit_コマンド0_Click End Sub フォーム2: Option Compare Database Option Explicit コード自体には問題はありません。 しかし、"フォーム2"の表示に失敗し"フォーム1"も閉じられないです。 原因は、DoCmd.OpenForm "フォーム2"でエラーが発生しているからです。 この場合、エラートラップの働きでDoCmd.Close acForm, "フォーム1"はスキップされます。 理屈の上では、これが一つの原因です。 理屈の上では、フォームの誤動作が二つ目の原因です。 肝心のコード全体を示されないと、この推測が当をえているのかも疑問。 なお、フォームの誤動作は、プロシージャの移動で発生します。 あちこちからプロシージャの切り貼りを繰り返せば、動作は保証されません。
お礼
ありがとうございます。
- Ganners07
- ベストアンサー率12% (1/8)
DoCmd.Close acForm, "フォーム1" としてください。 どのフォームを閉じるのかを指定しないと、アクティブなフォームを閉じることになります。 画面遷移直後ですと、アクティブなフォームはフォーム2になります。 このような場合は、なにを閉じるのかを指定することで対応します。
お礼
ありがとうございます。 実は >DoCmd.Close acForm, "フォーム1" と言うのも試してみたのですが、やはり閉じませんでした。 何がいけないのでしょうか・・・。
お礼
ありがとうございます。