簡體   English   中英

Excel-計時器關閉工作簿

[英]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

您是否嘗試過使用Excel的“ OnTime”?

http://msdn.microsoft.com/zh-CN/library/aa195809(v=office.11​​).aspx

提姆

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM