防止On.Time多次运行

时间:2016-12-08 06:26:50

标签: excel vba excel-vba

我将以下宏分配给按钮:

Sub refresh()

    Application.Calculation = xlCalculationManual
    ActiveWorkbook.RefreshAll
    Application.Calculation = xlCalculationAutomatic

    Call repeat

End Sub

Sub repeat()

    TimeToRun = Now + TimeValue("00:05:00")
    Application.OnTime TimeToRun, "refresh"

End Sub

如果多次单击该按钮,我会运行此宏的多个实例。

有没有办法在开始Sub refresh()之前取消所有运行的宏?

3 个答案:

答案 0 :(得分:0)

这样的事情:

Dim TimeToRun

Sub refresh()

    Application.Calculation = xlCalculationManual
    ActiveWorkbook.RefreshAll
    Application.Calculation = xlCalculationAutomatic

    Call repeat

End Sub

Sub repeat()

    If TimeToRun > 0 Then
         'cancel previous...
         Application.OnTime TimeToRun, "refresh", False
    End If

    TimeToRun = Now + TimeValue("00:05:00")
    Application.OnTime TimeToRun, "refresh"

End Sub

答案 1 :(得分:0)

我尝试重复添加取消代码,但它无法正常工作。我添加了另一个在单击按钮时应该运行的子项。范围(" G1")是我用来存储时间值的单元格。

Sub refresh()

    Application.Calculation = xlCalculationManual
    ActiveWorkbook.RefreshAll
    Application.Calculation = xlCalculationAutomatic

Call repeat

End Sub


Sub repeat()

    TimeToRun = Now + TimeValue("00:00:10")

    'stoer the TimeToRun
    Range("G1") = TimeToRun

    'schedule the next refresh
    Application.OnTime EarliestTime:=TimeToRun, Procedure:="refresh", Schedule:=True

End Sub


Sub subForClick()

    If Not (IsEmpty(Range("G1"))) Then
        Application.OnTime EarliestTime:=Range("G1").Value, Procedure:="refresh", Schedule:=False
    End If

    Call refresh
End Sub

答案 2 :(得分:0)

晚了聚会,但是我创建了一个功能来检查时间,并让用户在一段时间后再次运行代码。

Private Function timeCheck() As Boolean

    If VBA.Now() > TimeControl.Range("A1").Value + VBA.TimeValue("00:05:00") Then
        timeCheck = True
    Else
        timeCheck = False
    End If

End Function

TimeControl是将时间值保留在范围A1上的工作表的名称。

因此,您只需要使用以下功能:

If timeCheck = True Then
   TimeControl.Range("A1").Value = VBA.Now()
   do something
else
   do something else
end if