Для получения эффекта, который вы ищете, я использовал следующее:
Option Explicit
Public TimerRunning As Boolean
Dim CalculationDelay As Integer
Public Sub StartStop_Click()
If (TimerRunning) Then
TimerRunning = False
Else
TimerRunning = True
TimerLoop
End If
End Sub
Private Sub TimerLoop()
Do While TimerRunning
'// tweak this value to change how often the calculation is performed '
If (CalculationDelay > 500) Then
CalculationDelay = 0
Application.Calculate
Else
CalculationDelay = CalculationDelay + 1
End If
DoEvents
Loop
End Sub
StartStop_Click
- это макрос, который я привязываю к кнопке Пуск / Стоп для секундомера. Вы можете придумать и изменить его имя на «Пуск» или «Стоп» в зависимости от значения TimerRunning
, но я пояснил концепцию просто.
Вот две ключевые вещи:
Application.Calculate
Что заставляет Excel вычислять рабочий лист, и:
DoEvents
Что позволяет VBA работать в фоновом режиме (т. Е. Excel не перестает отвечать на вводимые пользователем данные). Это то, что позволяет вам все еще нажимать кнопку «Стоп», даже если таймер работает.