1分钟活动后,VBA Excel Application OnTime

时间:2018-10-14 13:39:53

标签: excel vba ontime

我已经创建了一个文件并有一个代码,无论我在ActiveSheets中的什么位置,一分钟后它都会选择我在代码中指示的默认单元格。

请在下面找到我的代码:

此工作簿模块:

Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
stop_timer
End Sub

Private Sub Workbook_Open()
start_timer
End Sub

常规模块:

Option Explicit
Public RunWhen As Double
Public Sub start_timer()
'active the code after 1 minute
RunWhen = Now + TimeValue("00:01:00")
Application.OnTime RunWhen, "TimerRoutine"
End Sub

'Hier the code that must run every 1 minute and what he has to do'
Public Sub TimerRoutine()
Select Case LCase(ActiveSheet.Name)
Case "intervento spinale"
    ActiveSheet.Range("J97").Select
Case "stroke"
    ActiveSheet.Range("J131").Select
Case "infiltrazione"
    ActiveSheet.Range("J67").Select
Case "diagnostica"
    ActiveSheet.Range("J97").Select
Case "embo"
    ActiveSheet.Range("J136").Select
Case "epatobiliare"
    ActiveSheet.Range("J88").Select
Case "body"
    ActiveSheet.Range("J151").Select
End Select

start_timer  ' Reschedule the procedure
End Sub

Public Sub stop_timer()
Application.OnTime RunWhen, "TimerRoutine", , False
End Sub

我的问题是,即使我正在处理工作表,此代码也始终有效。 1分钟后,它将自动进入代码指示的单元格。如果我正在处理工作表,则代码不会开始计算1分钟。

只有我停下来,并在执行代码后保持静止1分钟。但是,如果我工作,我会在单元格中书写,否。如何更改我创建的代码,使其在不活动后获得分钟的倒计时以启动代码?

1 个答案:

答案 0 :(得分:0)

ThisWorkbook模块中,您可以执行以下操作:

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    stop_timer
    start_timer  
End Sub

每当您更改工作簿中任何工作表上的选择时,这将重置计时器。