こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Access2002 終了時の処理

フォーム及びアクセスを誤って終了させることのないよう、フォーム内ボタンもしくは右上×をクリックした時、以下のモジュールで確認ボタンを表示させようとしています。

========================
Private Sub Form_Close()

'閉じるとき確認 2004/6/9

If MsgBox("システムを終了しますか?", vbYesNo + vbQuestion, _
"終了確認") = vbNo Then
Cancel = False

End If

End Sub
========================

システムを終了しますか?のコメントとともにYes No ボタンも出ますが、Noを押しても終了してしまいます。終了しないようにするにはどのようにすればよいのでしょうか?

いつもすみません。よろしくお願いします。

投稿日時 - 2004-06-09 16:00:17

QNo.886268

困ってます

質問者が選んだベストアンサー

#1です。

どうしても、終了ボタンを押した時とFrom_Unlaod時で
同一の関数を呼び出したい時は、フラグを引数として
共通関数を呼び出してみたらいかがでしょう?
↓サンプルです。
Private Sub cmdEnd_Click()
Dim intFlg As Integer

intFlg = 1
Call Terminate(intFlg)

End Sub

Private Sub Form_Unload(Cancel As Integer)
Dim intFlg As Integer

intFlg = 2

Cancel = Terminate(intFlg)
End Sub

Public Function Terminate(intFlg As Integer) As Boolean
On Error Resume Next

Terminate = False

Select Case intFlg
Case 1 '呼び出し元が終了ボタンクリック時
DoCmd.Close acForm, Me.Name

Case 2 '呼び出し元がForm_Unload時
If MsgBox("システムを終了しますか?", vbYesNo + vbQuestion, "終了確認") = vbNo Then
Terminate = True
End If
End Select
End Function

ただ、コード的には前に書いたほうが短いんですけどね。(^^;
こっちのほうがすっきりしているように見えますが、
ま、お好みのほうをご使用ください。
ではでは。ご参考までに。

投稿日時 - 2004-06-10 09:22:30

お礼

ありがとうございます。何度もすみません。
実は終了時に別の作業をするために標準モジュールにひとつ入っています。途中のアドバイスではterminateとうまく連結できたのですが、最後の二つはうまくいきませんでした・・・。
アクセス知識レベルが低く、こなすことも出来ず・・。沢山お時間を割いていただいたのに本当にすみませんでした。ありがとうございました。

投稿日時 - 2004-06-11 10:55:57

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.6

またまた失礼いたします。

#4さんへの補足への質問です。
>でも、隣にあるLoginボタンも、終了しますか?の
画面(Yes+No)が出てきてしまうのです。

どういったコードを書かれたのかを知りたいのですが…。

>ところで、現在、アクセス内にある全部の終了ボタン及び右上×クリック時にCloseするとき、システム終了という全体モジュールに飛ぶようになっているのですがそこで操作できないのでしょうか?

Private Sub End_Click()
On Error Resume Next

DoCmd.Close acForm, Me.Name

End Sub

Private Sub Form_Unload(Cancel As Integer)
Cancel = Terminate
End Sub

Public Function Terminate() As Boolean
On Error Resume Next

Terminate = False

If MsgBox("システムを終了しますか?", vbYesNo + vbQuestion, "終了確認") = vbNo Then
Terminate = True
End If

End Function

終了ボタンからはフォームの終了だけで良いです。
フォームの終了がForm_Unloadを勝手に呼び出すので
必要ないですね。Form_Unloadだけで呼び出してください。

ではでは。

投稿日時 - 2004-06-09 17:33:00

ANo.5

#1です。
#4さんとほとんど同じなのですが、

Private Sub End_Click()
On Error Resume Next '←(1)エラー無視

DoCmd.Close acForm, Me.Name '←(2)フォームを閉じる
End Sub

でやってみてください。(1)を記入する理由は(2)でForm_Unloadイベントが
キャンセルした時にエラーが発生してしまうのを抑制する為です。

テスト済みなので大丈夫です。やってみてください。(^^)

投稿日時 - 2004-06-09 16:59:02

補足

ありがとうございます。
終了ボタンクリック時1回目は成功したのですが、もう1度終了しますかが出てきて、Noとすると閉じてしまいます。#4さんの補足でお願いしたのですが、全体モジュールで対応する策はないのでしょうか?

投稿日時 - 2004-06-09 17:18:42

#2です。

#1さんへの回答に対する補足でのことなんですが、ボタン内の終了をどうやってるのかわからないんで、自信はありませんが。
実際、自分で質問者さんと同じ状態と思われるフォームを作ってみましたが。
終了ボタンのClickイベントのコードを、

Private Sub ボタン_Click()

On Error GoTo Err_Trap

DoCmd.Close acForm, Me.Name

Exit Sub

Err_Trap:

Resume Next

End Sub

としてみてください。

おそらくうまくいくと思います。

投稿日時 - 2004-06-09 16:43:18

補足

再度の回答ありがとうございます。
終了ボタンで成功しました。
でも、隣にあるLoginボタンも、終了しますか?の
画面(Yes+No)が出てきてしまうのです。

ところで、現在、アクセス内にある全部の終了ボタン及び右上×クリック時にCloseするとき、システム終了という全体モジュールに飛ぶようになっているのですがそこで操作できないのでしょうか?
何度もすみません。

投稿日時 - 2004-06-09 17:12:25

ANo.3

> Private Sub Form_Close()

閉じる時イベントには、Cancel 引数がないので、読み込み解除時イベントを
使ってみてください。

投稿日時 - 2004-06-09 16:15:51

お礼

回答ありがとうございます。

投稿日時 - 2004-06-09 17:20:48

はじめまして。

上記コードを、Closeイベントでなくて、UnLoadイベント(読み込み解除時)の中にコードを記述し、
さらにコードを、

Cancel=False

から

Cancel=True

に変更してください。

投稿日時 - 2004-06-09 16:11:02

ANo.1

こんにちわ。
きっと↓こうですね。
UnloadイベントでCacelが使用できます。
あとイベントを中止したい時はCacelはTrueですね。
Private Sub Form_Unload(Cancel As Integer)
If MsgBox("システムを終了しますか?", vbYesNo + vbQuestion, "終了確認") = vbNo Then
Cancel = True

End If
End Sub
ではでは。

投稿日時 - 2004-06-09 16:06:49

補足

早速の回答ありがとうございます。
右上の閉じるをクリックした場合、Noはきちんと反応して終了しないのですが、フォーム内のボタンを押すと、Noで終了してしまいます。
ボタン内に、同じモジュール入れましたが結果は2回Yes Noの確認を聞かれるだけで・・・。
お時間ありましたら、もう一度よろしくお願いいたします。

投稿日時 - 2004-06-09 16:26:21

あなたにオススメの質問