フォーム及びアクセスを誤って終了させることのないよう、フォーム内ボタンもしくは右上×をクリックした時、以下のモジュールで確認ボタンを表示させようとしています。
========================
Private Sub Form_Close()
'閉じるとき確認 2004/6/9
If MsgBox("システムを終了しますか?", vbYesNo + vbQuestion, _
"終了確認") = vbNo Then
Cancel = False
End If
End Sub
========================
システムを終了しますか?のコメントとともにYes No ボタンも出ますが、Noを押しても終了してしまいます。終了しないようにするにはどのようにすればよいのでしょうか?
いつもすみません。よろしくお願いします。
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
ただ、コード的には前に書いたほうが短いんですけどね。(^^;
こっちのほうがすっきりしているように見えますが、
ま、お好みのほうをご使用ください。
ではでは。ご参考までに。
ありがとうございます。何度もすみません。
実は終了時に別の作業をするために標準モジュールにひとつ入っています。途中のアドバイスではterminateとうまく連結できたのですが、最後の二つはうまくいきませんでした・・・。
アクセス知識レベルが低く、こなすことも出来ず・・。沢山お時間を割いていただいたのに本当にすみませんでした。ありがとうございました。
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だけで呼び出してください。
ではでは。
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イベントが
キャンセルした時にエラーが発生してしまうのを抑制する為です。
テスト済みなので大丈夫です。やってみてください。(^^)
この回答への補足
ありがとうございます。
終了ボタンクリック時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
としてみてください。
おそらくうまくいくと思います。
この回答への補足
再度の回答ありがとうございます。
終了ボタンで成功しました。
でも、隣にあるLoginボタンも、終了しますか?の
画面(Yes+No)が出てきてしまうのです。
ところで、現在、アクセス内にある全部の終了ボタン及び右上×クリック時にCloseするとき、システム終了という全体モジュールに飛ぶようになっているのですがそこで操作できないのでしょうか?
何度もすみません。
No.2
- 回答日時:
はじめまして。
上記コードを、Closeイベントでなくて、UnLoadイベント(読み込み解除時)の中にコードを記述し、
さらにコードを、
Cancel=False
から
Cancel=True
に変更してください。
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
ではでは。
この回答への補足
早速の回答ありがとうございます。
右上の閉じるをクリックした場合、Noはきちんと反応して終了しないのですが、フォーム内のボタンを押すと、Noで終了してしまいます。
ボタン内に、同じモジュール入れましたが結果は2回Yes Noの確認を聞かれるだけで・・・。
お時間ありましたら、もう一度よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- その他(Microsoft Office) windows10で作業を終了する際の「保存しますか はい いいえ」を表示させずに自動で保存する方法 6 2023/03/15 11:29
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- Visual Basic(VBA) 数式が消える 1 2023/03/19 16:55
- Windows Vista・XP 電源ボタンでスリープするように設定の場合の強制終了方法 3 2022/06/21 14:00
- YouTube AmazonファイバースティックってYouTube見る 1 2022/08/30 20:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA(エクセル)で自動的にボタン...
-
VBA シートのボタン名を変更し...
-
フォームの再読み込み
-
VBAのボタンの位置が変わって困...
-
VBA CommandButtonの文字ずれ
-
バックスペース機能の作り方
-
Excel VBA Application.caller...
-
他のアプリケーションとの連携
-
Access VBA でデータペーストを...
-
VBA IE ダウンロード ダイアロ...
-
Excel VBA実行中にワークシート...
-
コマンドボタンやイメージにマ...
-
C#プログラムで、ボタンをショ...
-
Button(コントロール)を半透明...
-
Access2002 終了時の処理
-
TextBoxでEnterキーを押すと、...
-
Vba 電卓 一文字消すボタン
-
VBAでオプションボタンによって...
-
ボタンの枠線の様なものを消したい
-
プロシージャからイベントをコ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
-
フォームの再読み込み
-
VBA CommandButtonの文字ずれ
-
ユーザーフォームに別シートか...
-
VBAのボタンの位置が変わって困...
-
Access VBA でデータペーストを...
-
Excel VBA Application.caller...
-
セルをマクロのボタンにしたい。
-
コマンドボタンやイメージにマ...
-
ボタン
-
プロシージャからイベントをコ...
-
ボタンをマウスで押し続けたと...
-
VBA でのボタンの移動について
-
C#で動的に作ったtextboxを消す。
-
バックスペース機能の作り方
-
VBAで多数のプログラムを一つの...
-
アイコンとボタンの違い
-
TextBoxでEnterキーを押すと、...
-
VBA IE ダウンロード ダイアロ...
おすすめ情報