標準モジュールで
Sub 終了()
ActiveWorkbook.Close Savechanges:=True
End Sub
THIS WORKBOOKに
MsgBox ("10分後に自動的に保存して閉じます。")
Application.OnTime Now + TimeValue("00:10:00"), "終了"
End Sub
を閉じ忘れ防止の為にこのマクロ入れているのですが、エクセルを普通に閉じたあと、何故か10分後にこの閉じたエクセルを開こうとします。
特にこの構文自体は問題ないかと思いますが、原因として考えられるものはありますでしょうか?
GooUserラック様>
下記になります。
Private Sub Workbook_Open()
If ActiveWorkbook.ReadOnly Then
Exit Sub
Else
MsgBox ("閉じ忘れ防止の為、10分後に自動保存して閉じます。")
Application.OnTime Now + TimeValue("01:10:00"), "終了"
End If
End Sub
No.3
- 回答日時:
No.2です。
残っていたらマクロが中断せず『閉じます』以降を継続しようとしているかと思ったのです。
けどタスクにないとなると。。。何だろ?
昔のバージョンならExcelブックを閉じるのとExcelのアプリケーションを終了させるので、
どちらが先がよいか?なんて検証をされてた方もいらっしゃいますしね。
・・・最近のバージョンは改善されたような感じみたいですが、うちのは古いので検証できませんでした。
Excelでお仕事:Application.Quitの誤解
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub0 …
No.4
- 回答日時:
以下のようにされたらどうなりますか?
--------------------------------------------------------------------------------
☆ 標準モジュールに
'・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Option Explicit
Public 終了時間 As Date
'・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Sub 終了()
ActiveWorkbook.Close Savechanges:=True
End Sub
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
☆ ThisWorkbook に
'・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.OnTime 終了時間, "終了", , False
End Sub
'・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Private Sub Workbook_Open()
If ActiveWorkbook.ReadOnly Then
Exit Sub
Else
MsgBox ("閉じ忘れ防止の為、10分後に自動保存して閉じます。")
終了時間 = Now + TimeValue("00:10:00")
Application.OnTime 終了時間, "終了"
End If
End Sub
--------------------------------------------------------------------------------
ありがとうございます。試してみますが、追加になった部分はどのような意図での追加になるのでしょうか?VBA に詳しくなく申し訳ありません(_ _)
No.5
- 回答日時:
No.4 のお礼について
もしかしたら、この機能を使わず途中で閉じてしまったときにエクセル内にこの命令が残ってしまっているのでは?の確認のために閉じる時にこの機能をキャンセルしています。
別のエクセルファイルを開いているときにいろいろと問題になりそうなコードなので…
なお「Sub 終了」にはもう一工夫必要そうなので、結果が良くても数日閉じないでおいていただけると幸いです。
No.9
- 回答日時:
3バージョンを作ってみました。
それぞれ欠点が有るので実際にテストしていただいて一番使いやすいものをお使いください。その1(元の物に一番近いもの)
--------------------------------------------------------------------------------
☆ 標準モジュールに
'・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Public 終了時間 As Date
'・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Sub 終了時間セット()
If ThisWorkbook.ReadOnly Then Exit Sub
If 終了時間 <> 0 Then
Application.OnTime 終了時間, "終了", , False
End If
終了時間 = Now + TimeValue("00:03:00")
Application.OnTime 終了時間, "終了"
End Sub
'・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Sub 終了()
終了時間 = 0
ThisWorkbook.Save
If Workbooks.Count = 1 Then
Application.Quit
Else
ThisWorkbook.Close
End If
End Sub
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
☆ ThisWorkbook に
'・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If 終了時間 <> 0 Then
Application.OnTime 終了時間, "終了", , False
End If
End Sub
'・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Private Sub Workbook_Open()
If ActiveWorkbook.ReadOnly Then
Exit Sub
Else
MsgBox ("閉じ忘れ防止の為、3分間操作しない場合自動保存して閉じます。")
Call 終了時間セット
End If
End Sub
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
☆ 対象のシートイベントに
'・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Call 終了時間セット
--------------------------------------------------------------------------------
※ 自動終了時予告もなく終了してしまう
No.10
- 回答日時:
その2(Windows Scripting Host の Popupメソッドを使ったもの)
--------------------------------------------------------------------------------
☆ 標準モジュールに
'・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Option Explicit
'・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Public 確認時間 As Date
'・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Sub 確認時間セット(残分 As Long)
Dim 残時間 As Date
If ThisWorkbook.ReadOnly Then Exit Sub
残時間 = 残分 * 0.0006944
If 確認時間 <> 0 Then
Application.OnTime 確認時間, "確認処理", , False
End If
確認時間 = Now + 残時間
Application.OnTime 確認時間, "確認処理"
End Sub
'・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Sub 確認処理()
Dim WSH As Object
確認時間 = 0
Set WSH = CreateObject("Wscript.Shell")
If WSH.Popup("自動終了処理が開始されました。終了処理を一時停止しますか?", 30, , vbDefaultButton2 + vbOKCancel) = vbOK Then
Call 確認時間セット(1)
Else
ThisWorkbook.Save
If Workbooks.Count = 1 Then
Application.Quit
Else
ThisWorkbook.Close
End If
End If
Set WSH = Nothing
End Sub
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
☆ ThisWorkbook に
'・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Private Sub Workbook_Open()
Call 確認時間セット(1)
End Sub
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
☆ 対象のシートイベントに
'・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Call 確認時間セット(1)
--------------------------------------------------------------------------------
◎ 自動終了時の30秒前に予告メッセージが出てから終了出来る
「If WSH.Popup("自動終了処理が開始されました。終了処理を一時停止しますか?", 30, , vbDefaultButton2 + vbOKCancel) = vbOK Then」の「30」が秒数です、適当に変更してください。
× 予告メッセージが他のアプリの下に表示されてしまう事がある
※「Call 確認時間セット(1)」の「1」が予告メッセージが表示されるまでの分数です、適当に変更してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) パーソナルXLSBのfuctionを呼び出すと「Functionが定義されていません」のエラーになる 2 2022/08/22 22:51
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/10 14:24
- Visual Basic(VBA) エクセルVBA エクセルを開いた後に編集可能な状態にするには? 2 2023/06/14 11:58
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) 数式が消える 1 2023/03/19 16:55
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESS側からEXCELの書式を設定...
-
VBSの処理中一旦処理を止めて再...
-
ASP VBScriptでスクリプト実行...
-
MFCのワーカースレッドとUIスレ...
-
ボタンが押された事を検知する...
-
【KeyDown】キーコードについて
-
シャットダウン時のExcel強制終...
-
アクセスVBAでVBYESNOボタンに...
-
VB6 コマンドボタン クリック...
-
Excel VBA で処理中断(DoEvents...
-
ASP.NETでのメッセージ画面を出...
-
My Documentsディレクトリを
-
ファンクションキーのキャンセ...
-
メッセージボックスのボタン名変更
-
[VC++] AfxBeginThreadで生成し...
-
「shift」ボタンが押された時。
-
VBA、UserFormを前面に出力して...
-
VBA kernel32 の意味
-
VBSで応答不要のメッセージボッ...
-
マウスのクリックを無視したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
メッセージボックスのボタン名変更
-
VBSの処理中一旦処理を止めて再...
-
VBA kernel32 の意味
-
VBSで応答不要のメッセージボッ...
-
VBA メッセージボックスを自動...
-
ACCESS側からEXCELの書式を設定...
-
Application.ScreenUpdating=Fa...
-
エクセルVBAでクリップボード内...
-
Excel VBA で処理中断(DoEvents...
-
【C#】 あるイベントから別イ...
-
Excel VBA 自動的に閉じるMsgBox
-
VBA、UserFormを前面に出力して...
-
ASP.NETでのメッセージ画面を出...
-
マウスのクリックを無視したい
-
EXCEL VBA「Application.Displa...
-
B列に特定の文字列が入っている...
-
MFCのワーカースレッドとUIスレ...
-
VCでウエイトをミリ秒でかけ...
-
DoEvents
-
「キャンセル」ボタン付きの処...
おすすめ情報
TimeValue("01:10:00"), "終了"⇒TimeValue("00:10:00"), "終了"
の間違えです。
すいません。。