我开发一个VBA代码,将在工作表中的单元格范围的运行。每次选择该单元格中的一个单元格时,我都希望代码执行。我正在使用以下方法:
Sub Worksheet_SelectionChange(ByVal Target As Range)
但是,代码是相当缓慢并且有次我想使用箭头键在该范围内进行导航。要做到这一点,我想使用定时器功能,如果我上了0.5秒以上的小区,将只运行代码。
我尝试过的代码如下:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'set timer
Dim PauseTime, Start, Finish, TotalTime
PauseTime = 0.6 ' Set duration.
Start = Timer ' Set start time.
Do While Timer < Start + PauseTime
DoEvents ' Yield to other processes.
Loop
Finish = Timer ' Set end time.
TotalTime = Finish - Start ' Calculate total time.
If Abs(TotalTime) < 0.1 Then GoTo ws_exit
'continuation of code......
ws_exit:
Application.EnableEvents = True
End Sub
该代码的主要问题是它是递归的,并返回到我按的第一个单元格上设置的第一个计时器。我想知道是否有一种方法可以延迟SelectionChange代码的运行,直到将用户设置在单元格上X的时间。
谢谢
尹
答案 0 :(得分:0)
一个类模块解决这个问题。添加一个类模块,将其称为cTimer。粘贴此代码:
Option Explicit
Public Target As Range
Private StartTime As Double
Public WaitTime As Double
Public Sub HandlePrevious()
If Timer - StartTime > WaitTime Then
'Handle things now using Target
Debug.Print Target.Address, "Taking action"
Else
Debug.Print Target.Address, "Moving on"
End If
End Sub
Private Sub Class_Initialize()
StartTime = Timer
End Sub
在工作表模块中使用它:
Option Explicit
Dim mcTimer As cTimer
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not mcTimer Is Nothing Then
mcTimer.HandlePrevious
End If
Set mcTimer = Nothing
Set mcTimer = New cTimer
mcTimer.WaitTime = 0.5
Set mcTimer.Target = Target
End Sub