| 
    
     |  | こんにちは。 
 「更新されていなければ、自動閉じる」処理を行おうとしているのですが、
 BeforeSaveイベントからOnTimeを再セットできずに悩んでいます。
 
 Open→Reset_OnTime→5秒後にBook_Chk→Book_ChkのSaveでBeforeSaveイベント
 →Reset_OnTime→5秒後にBook_Chk→・・・・
 となる予定だったのですがReset_OnTimeは実行されるのですが、
 次回のスケジュールとステータスバーの更新がされません。
 手動で上書き保存するとスケジュールとタスクバーの更新は、実行されます。
 
 Book_Chk()内の*2の箇所で呼び出せば動作は問題ないのですが、
 「なぜダメなのか?」知りたいです。
 一通り、情報はチェックしたつもりなのですが、原因がわかりませんでした。
 よろしくお願いします。
 
 '標準モジュール
 
 Public T As Date 'チェック実行時刻
 
 Sub Reset_OnTime()
 MsgBox "Reset_OnTime" '*1 Reset_OnTimeの実行チェック用
 Const Intarval As String = "00:00:05" 'チェック間隔 テスト用に5秒間隔
 
 On Error Resume Next
 '次回チェックの削除
 Application.OnTime T, "Book_Chk", , False
 '次回チェックの再設定
 T = Now() + TimeValue(Intarval)
 Application.OnTime T, "Book_Chk"
 Application.StatusBar = "次回チェック:" & T
 On Error GoTo 0
 
 End Sub
 
 Sub Book_Chk()
 Dim WSH As Object 'WScript.Shell
 Dim Lmt As Date 'リミット時刻
 Dim Ans As Variant 'Popupの回答
 Dim Cnt As Integer 'Popupの表示時間(秒)
 
 Cnt = 3
 Set WSH = CreateObject("WScript.Shell")
 '更新されているかチェック
 If ThisWorkbook.Saved = True Then
 Lmt = T + TimeSerial(0, 0, Cnt) 'Lmtにチェック時間+Popup時間をセット
 Ans = WSH.Popup("未更新です。" & vbCr & Format(Lmt, "hh:mm:ss") & _
 "に自動終了します。" & vbCr & "更新を続けますか?", Cnt, , vbQuestion)
 If Ans <> 1 Then
 Set WSH = Nothing
 ThisWorkbook.Close True
 End If
 End If
 ThisWorkbook.Save '現在までの更新を上書き保存
 Set WSH = Nothing
 
 'Call Reset_OnTime '*2 BeforeSaveで実行されるので必要ないはず・・
 End Sub
 
 
 'ThisWorkBookモジュール
 
 Private Sub Workbook_Open()
 '次回チェックの設定
 Call Reset_OnTime
 End Sub
 
 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
 '次回チェックの再設定
 Call Reset_OnTime
 End Sub
 
 Private Sub Workbook_BeforeClose(Cancel As Boolean)
 '次回チェック分のOnTimeを解除
 On Error Resume Next
 Application.OnTime T, "Book_Chk", , False
 On Error GoTo 0
 End Sub
 
 |  |