dポイントプレゼントキャンペーン実施中!

ACCESS VBA の初心者です。
前に進まず困っておりまして申し訳ありませんが教えてください。
フォーム1にボタンをつけそのボタンを押すとフォーム2に画面遷移するように、作っています。
フォーム2に画面遷移した場合、フォーム1は不要になるので、画面遷移と同時にフォーム1を閉じたいのですが、うまく行きません。
docmd.close
と言う命令を使うとフォーム1のボタンを押すと画面遷移先のフォーム2の方が一瞬表示されてすぐに閉じてしまいます。
どうしたら、フォーム2が表示されてフォーム1が同時に閉じる事ができるでしょうか?

A 回答 (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に関しても、不要な部分を削除していきます。

不具合がなくなれば、その直前に削除した部分が怪しい。
    • good
    • 1
この回答へのお礼

ありがとうございます。

お礼日時:2008/01/09 19:31

チクッと同じような現象を再現してみました。



フォーム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"はスキップされます。
理屈の上では、これが一つの原因です。
理屈の上では、フォームの誤動作が二つ目の原因です。

肝心のコード全体を示されないと、この推測が当をえているのかも疑問。

なお、フォームの誤動作は、プロシージャの移動で発生します。
あちこちからプロシージャの切り貼りを繰り返せば、動作は保証されません。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2008/01/09 19:31

DoCmd.Close acForm, "フォーム1"



としてください。

どのフォームを閉じるのかを指定しないと、アクティブなフォームを閉じることになります。
画面遷移直後ですと、アクティブなフォームはフォーム2になります。
このような場合は、なにを閉じるのかを指定することで対応します。
    • good
    • 0
この回答へのお礼

ありがとうございます。
実は
>DoCmd.Close acForm, "フォーム1"
と言うのも試してみたのですが、やはり閉じませんでした。
何がいけないのでしょうか・・・。

お礼日時:2008/01/08 22:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A