如何在VBA中实现可中断的延迟?

时间:2016-07-13 19:50:02

标签: excel-vba vba excel

我在电子表格中有一些单元格,选中后会打开一个文本框。

例如,如果用户在不停止的情况下通过单元格进行制表,我不希望打开该框,因此我希望Worksheet_SelectionChange在打开文本框之前等待两秒钟。如果选择在此之前移动,则计时器将被中断并重新开始新单元格。

我一直试图尝试:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If (Intersect(Target, [rSpecialInstr]) Is Nothing) Then Exit Sub

    Application.Wait (Now + TimeValue("0:00:02"))

    frmSpecialInstr.Show

End Sub

...但我有一个预先存在的问题,宏随机时间停止,所以我无法测试这个技巧。 (我希望当我解决另一个问题时,社区会引导我回答。)

怀疑一旦选择落在一个单元格并启动此计时器,我实际上无法再次移动选择直到2秒通过。任何人都可以确认吗?

有没有更好的方法来完成这项任务?

1 个答案:

答案 0 :(得分:1)

例如:

Dim d As Date

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    'cancel any previous scheduled call
    If d > 0 Then
        Application.OnTime d, "Sheet1.test", , schedule:=False
        d = 0
    End If

    'schedule?
    If Not Intersect(Target, Range("A:A")) Is Nothing Then
        d = Now + TimeValue("0:00:02")
        Application.OnTime d, "Sheet1.test"
    End If

End Sub

Sub test()
    d = 0
    MsgBox "ok"
End Sub