Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー

Access2002 終了時の処理

フォーム及びアクセスを誤って終了させることのないよう、フォーム内ボタンもしくは右上×をクリックした時、以下のモジュールで確認ボタンを表示させようとしています。 ======================== Private Sub Form_Close() '閉じるとき確認 2004/6/9 If MsgBox("システムを終了しますか?", vbYesNo + vbQuestion, _ "終了確認") = vbNo Then Cancel = False End If End Sub ======================== システムを終了しますか?のコメントとともにYes No ボタンも出ますが、Noを押しても終了してしまいます。終了しないようにするにはどのようにすればよいのでしょうか? いつもすみません。よろしくお願いします。

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

  • ベストアンサー
  • guruguru2
  • ベストアンサー率29% (39/132)
回答No.7

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

Swim
質問者

お礼

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

すると、全ての回答が全文表示されます。

その他の回答 (6)

  • guruguru2
  • ベストアンサー率29% (39/132)
回答No.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だけで呼び出してください。 ではでは。

すると、全ての回答が全文表示されます。
  • guruguru2
  • ベストアンサー率29% (39/132)
回答No.5

#1です。 #4さんとほとんど同じなのですが、 Private Sub End_Click() On Error Resume Next '←(1)エラー無視 DoCmd.Close acForm, Me.Name '←(2)フォームを閉じる End Sub でやってみてください。(1)を記入する理由は(2)でForm_Unloadイベントが キャンセルした時にエラーが発生してしまうのを抑制する為です。 テスト済みなので大丈夫です。やってみてください。(^^)

Swim
質問者

補足

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

すると、全ての回答が全文表示されます。
回答No.4

#2です。 #1さんへの回答に対する補足でのことなんですが、ボタン内の終了をどうやってるのかわからないんで、自信はありませんが。 実際、自分で質問者さんと同じ状態と思われるフォームを作ってみましたが。 終了ボタンのClickイベントのコードを、 Private Sub ボタン_Click() On Error GoTo Err_Trap DoCmd.Close acForm, Me.Name Exit Sub Err_Trap: Resume Next End Sub としてみてください。 おそらくうまくいくと思います。

Swim
質問者

補足

再度の回答ありがとうございます。 終了ボタンで成功しました。 でも、隣にあるLoginボタンも、終了しますか?の 画面(Yes+No)が出てきてしまうのです。 ところで、現在、アクセス内にある全部の終了ボタン及び右上×クリック時にCloseするとき、システム終了という全体モジュールに飛ぶようになっているのですがそこで操作できないのでしょうか? 何度もすみません。

すると、全ての回答が全文表示されます。
  • Gin_F
  • ベストアンサー率63% (286/453)
回答No.3

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

Swim
質問者

お礼

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

すると、全ての回答が全文表示されます。
回答No.2

はじめまして。 上記コードを、Closeイベントでなくて、UnLoadイベント(読み込み解除時)の中にコードを記述し、 さらにコードを、 Cancel=False から Cancel=True に変更してください。

すると、全ての回答が全文表示されます。
  • guruguru2
  • ベストアンサー率29% (39/132)
回答No.1

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

Swim
質問者

補足

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

すると、全ての回答が全文表示されます。

関連するQ&A