プロが教える店舗&オフィスのセキュリティ対策術

標準モジュールで
Sub 終了()
ActiveWorkbook.Close Savechanges:=True
End Sub

THIS WORKBOOKに
MsgBox ("10分後に自動的に保存して閉じます。")
Application.OnTime Now + TimeValue("00:10:00"), "終了"
End Sub
を閉じ忘れ防止の為にこのマクロ入れているのですが、エクセルを普通に閉じたあと、何故か10分後にこの閉じたエクセルを開こうとします。
特にこの構文自体は問題ないかと思いますが、原因として考えられるものはありますでしょうか?

質問者からの補足コメント

  • TimeValue("01:10:00"), "終了"⇒TimeValue("00:10:00"), "終了"
    の間違えです。

    すいません。。

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/11/24 16:42

A 回答 (14件中1~10件)

ちなみに「MsgBox ("10分後に自動的に保存して閉じます。

") …」は、ThisWorkbook のどのイベントに有るのでしょうか?
この回答への補足あり
    • good
    • 0
この回答へのお礼

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

お礼日時:2017/11/24 16:39

Excelを普通に閉じた後でタスクマネージャーにExcel.EXEが残っているか否かは、既にチェック済みですよね?

    • good
    • 0
この回答へのお礼

めぐみんさん>

確認してみたのですが、特になさそうです。
ちなみに残っていたとしたら、原因として考えられるものは?
また解決方法はありますでしょうか??

お礼日時:2017/11/24 16:45

No.2です。



残っていたらマクロが中断せず『閉じます』以降を継続しようとしているかと思ったのです。
けどタスクにないとなると。。。何だろ?

昔のバージョンならExcelブックを閉じるのとExcelのアプリケーションを終了させるので、
どちらが先がよいか?なんて検証をされてた方もいらっしゃいますしね。
・・・最近のバージョンは改善されたような感じみたいですが、うちのは古いので検証できませんでした。

Excelでお仕事:Application.Quitの誤解
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub0 …
    • good
    • 0

以下のようにされたらどうなりますか?



--------------------------------------------------------------------------------
☆ 標準モジュールに
'・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
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
--------------------------------------------------------------------------------
    • good
    • 0
この回答へのお礼

ありがとうございます。試してみますが、追加になった部分はどのような意図での追加になるのでしょうか?VBA に詳しくなく申し訳ありません(_ _)

お礼日時:2017/11/24 18:05

No.4 のお礼について



もしかしたら、この機能を使わず途中で閉じてしまったときにエクセル内にこの命令が残ってしまっているのでは?の確認のために閉じる時にこの機能をキャンセルしています。

別のエクセルファイルを開いているときにいろいろと問題になりそうなコードなので…
なお「Sub 終了」にはもう一工夫必要そうなので、結果が良くても数日閉じないでおいていただけると幸いです。
    • good
    • 0

1つ確認が有ります。



このコードだと確認ボタンを押すと、作業中でも10分後に閉じてしまいますが良いのでしょうか?
セルをの選択位置を変えたりしたときに、それから10分後に自動で延長した方が良いのでは?
    • good
    • 0
この回答へのお礼

開きっぱなし防止と10分以上は使用しないかなと思いました。可能であれば、自動延長がよいのですが、複雑になりそうなのでできませんでした…可能でしょうか?

お礼日時:2017/11/24 18:27

自動延長はもちろん可能です。



もう一つ確認です。他のエクセルファイルを開いていた場合はどうしますか?
① 自分だけ保存して閉じる。他はそのままにしておく。
② 他も保存してエクセルも閉じる。
    • good
    • 0
この回答へのお礼

エクセルは共有化していないため、ひとりしか開けない仕様にしています。あとで開く人は読み取り。開いた人が閉じるのを忘れたとき用で時間が経つと閉じるようにしています。なので①になりますね(_ _)

お礼日時:2017/11/24 21:48

No.7 のお礼について



ちょっと誤解されてしまっているようです。エクセルはこのブックだけに使っているわけではないですよね?全然関係ない他のブックも同時に開くことが出来ますよね!その時はどうしますか?と言う事です。
    • good
    • 0
この回答へのお礼

申し訳ありません。。ほかの関係ないブックは、そのままでお願いしますm(_ _)m

お礼日時:2017/11/25 06:33

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 終了時間セット
--------------------------------------------------------------------------------

※ 自動終了時予告もなく終了してしまう
    • good
    • 0

その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」が予告メッセージが表示されるまでの分数です、適当に変更してください。
    • good
    • 0

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