重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

お世話様です。

Access2003 VBA にて、各プロシージャに貼ったエラートラップで、
メッセージを出力した後にAccessを終了したいと考えております。
ここで、通常終了時(フォームの×ボタン押下時)の
終了確認メッセージをForm_Unloadイベントで記述しているのですが、
エラートラップでの終了時にも、このメッセージが表示されてしまいます。

エラートラップでの終了時は、終了確認メッセージを表示させたくないので、
標準モジュールにパブリック変数のエラーフラグを用意し、
それで判断しようと考えたのですが、
エラートラップ内でエラーフラグに値を設定しても保持されず、
Form_Unloadイベントで終了確認メッセージがどうしても表示されてしまいます。
何か良い方法はありますでしょうか?よろしくお願いいたします。

例:
'***ボタンAクリックイベント*******************
Private Sub btn_A_Click()
On Error GoTo ERR_LINE
  <何らかの処理>
Exit Sub
ERR_LINE:
  MsgBox "予期せぬエラーが発生しました。終了します。" & Chr(13) & _
      "エラー番号: " & Err.Number & Chr(13) & _
      "エラー内容: " & Err.Description, vbCritical + vbOKOnly, "例外エラー"
  bl_ErrFlg = True 'エラーフラグ設定←保持されない
  Application.Quit
End Sub

'***フォームアンロードイベント*******************
Private Sub Form_Unload(Cancel As Integer)
  If bl_ErrFlg = False Then
    Cancel = MsgBox("終了します。よろしいですか?",vbQuestion + vbYesNo, "終了確認") = vbNo
  End If
End Sub

A 回答 (1件)

Application.Quit で bln_ErrFlg が破棄されたんでしょう。


ERR_LINE の中では Application.Quit じゃなくて、そのフォームを閉じる記述をし、
Unload イベントの中ではフラグが立っていなければメッセージ表示をし、フラグが立っていれば Application.Quit する、
てのはどうでしょうか?

Private Sub btn_A_Click()
 On Error GoTo ERR_LINE
 ' 処理
 Exit Sub
ERR_LINE:
 MsgBox "予期せぬエラーが発生しました。終了します。" & vbCrLf & _
  "エラー番号: " & Err.Number & vbCrLf & _
  "エラー内容: " & Err.Description, vbCritical + vbOKOnly, "例外エラー"
 bln_ErrFlg = True
 DoCmd.Close acForm, Me.Name
End Sub

Private Sub Form_Unload(Cancel As Integer)
 If Not (bln_ErrFlg) Then
  Cancel = MsgBox("終了しますがよろしいですか?", vbQuestion + vbYesNo, "終了確認") = vbNo
 Else
  Application.Quit
 End If
End Sub
    • good
    • 0
この回答へのお礼

ご教授のとおりで、実現できました。
Form_LoadやForm_Openなどのフォーム開閉時はやり方を変えて終了させましたが、
概ねこれで大丈夫でした。
ありがとうございました。

お礼日時:2009/11/12 15:12

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