[英]Excel - timer to close workbook
相當一段時間以前,如果用戶將共享工作簿保持打開狀態(例如,整夜或整天),我會自動整理一些代碼以在一段時間后自動關閉共享工作簿。 該代碼運行良好,除了關閉它所在的工作簿時; 它還關閉了所有工作簿和excel(沒有Application.Quit)。 用戶對此感到煩惱,有誰知道我怎樣才能讓它僅關閉(本工作簿),而不是所有其他?
謝謝。
代碼如下:
Option Explicit
' Declarations
Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Private mlngTimerID As Long
' start the timer
Public Sub StartTimer(lngInterval As Long)
mlngTimerID = SetTimer(0, 0, lngInterval, AddressOf TimerCallBack)
End Sub
' when the timer goes off
Public Sub TimerCallBack(ByVal hwnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTime As Long)
' stop the timer
StopTimer
' don't save if read only
If ThisWorkbook.ReadOnly = False Then
' save
ThisWorkbook.Save
End If
' exit without saving
ThisWorkbook.Activate
ThisWorkbook.Close False
End Sub
Public Sub StopTimer()
KillTimer 0, mlngTimerID
End Sub
'To use timer:
'To start the timer
'Call startTimer(1000)'1000 = 1 Second
'To stop timer
'Call stopTimer
我知道這是一個比較老的問題,但是我想我應該分享一個對我有用的解決方案。 打開后,工作簿將存儲為Public變量,因此它將是計時器到期時唯一關閉的工作簿。 如果工作簿在時間到期之前關閉,則計時器將被取消。 如果計時器到期並且工作簿仍處於打開狀態,則它將被保存並自動關閉。
將下面的代碼插入“ ThisWorkbook”
'When the workbook is opened, call StartTimer()
Public Sub Workbook_Open()
Run "StartTimer"
End Sub
'Detect if the workbook is closed
Public Sub Workbook_BeforeClose(Cancel As Boolean)
'Cancel Saveclose
Run "StopTimer"
End Sub
將下面的代碼插入模塊
'Global variables
Public RunWhen As Double
Public Const cRunIntervalSeconds = 300 ' seconds (set to 5 minutes)
Public Const cRunWhat = "SaveClose" ' the name of the procedure to run
Public GlobalBook As Workbook
'Start Timer using interval set in global variables
Sub StartTimer()
Set GlobalBook = ActiveWorkbook
RunWhen = Now + TimeSerial(0, 0, cRunIntervalSeconds)
Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, _
Schedule:=True
End Sub
'Stop the Timer whenever the workbook is closed prematurely
Public Sub StopTimer()
On Error Resume Next
Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, _
Schedule:=False
End Sub
'Close the workbook automatically once the Timer has expired
Public Sub SaveClose()
'Time is up, workbook will save and close automatically
Dim wb As Workbook
For Each wb In Workbooks
'Check to see if workbook is still open
If wb.Name = GlobalBook.Name Then
Set wb = Application.Workbooks(GlobalBook.Name)
'Close workbook and Save Changes
wb.Close SaveChanges:=True
End If
Next
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.