2

我不确定这是否可能我在网上搜索答案时并没有真正找到任何东西。我有一个宏,它会在 5 分钟不活动后关闭。就像一个魅力,除了当用户正在编辑一个单元格时,计时器不会启动,因此它不会因此而关闭。有没有办法让excel有一个计时器来记录用户处于编辑模式的时间,然后它将把他们带出来。一旦退出编辑模式,宏将开始 5 分钟不活动。任何帮助是极大的赞赏!

这是工作簿模块

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Me.Saved = True
End Sub


Private Sub Workbook_Open()
    start_Countdown
    End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    stop_Countdown
    start_Countdown
    End Sub

这是标准模块

Option Explicit
Public Close_Time As Date
Sub start_Countdown()
    Close_Time = Now() + TimeValue("00:05:00")
    Application.OnTime Close_Time, "close_WB"
    End Sub
Sub stop_Countdown()
    Application.OnTime Close_Time, "close_WB", , False
    End Sub
Sub close_wb()
    ThisWorkbook.Close True
    End Sub
4

2 回答 2

2

您将需要VBA 之外的某种进程监视器/任务终止器来执行此操作,因为 VBA 在用户处于输入模式时被“锁定”。

于 2014-03-17T16:56:39.293 回答
1

你可以试试这个:

Public Declare Function SetTimer Lib "user32" ( _
 ByVal HWnd As Long, _
 ByVal nIDEvent As Long, _
 ByVal uElapse As Long, _
 ByVal lpTimerFunc As Long) As Long

Public Declare Function KillTimer Lib "user32" ( _
 ByVal HWnd As Long, _
 ByVal nIDEvent As Long) As Long

Public TimerID As Long
Public TimerSeconds As Single

Sub StartTimer()
  TimerSeconds = 5*60 ' how often to "pop" the timer (5 minutes in the example).
  TimerID = SetTimer(0&, 0&, TimerSeconds * 1000&, AddressOf TimerProc)
End Sub

Sub EndTimer()
 On Error Resume Next
 KillTimer 0&, TimerID
End Sub

Sub TimerProc(ByVal HWnd As Long, ByVal uMsg As Long, _
    ByVal nIDEvent As Long, ByVal dwTimer As Long)

 ' call here whatever you want to call
End Sub

这即使在编辑模式下也始终有效,不要忘记在退出之前调用 StartTimer 来启动和 EndTimer ......

于 2014-03-17T17:30:11.643 回答