Em vez de usar Selection
em todo o seu código,
Eu sugiro que você use Selection
para identificar a célula atualmente selecionada
quando você invocar seu StartBtn
, salve esse local,
e usá-lo nas outras rotinas; por exemplo,
Dim StopTimer As Boolean
Dim SchdTime As Date
Dim Etime As Date
Dim SavedLoc As Variant ' Here
Const OneSec As Date = 1 / 86400#
Private Sub StartBtn_Click()
If Selection.Count <> 1 Then
MsgBox "Please select a single cell."
Exit Sub
End If
SavedLoc = Selection.Address ' Here
Range(SavedLoc).Interior.ColorIndex = 6 ' Here
StopTimer = False
SchdTime = Now()
Range(SavedLoc).Value = Format(Etime, "hh:mm:ss") ' Here
Application.OnTime SchdTime + OneSec, "NextTick"
End Sub
Private Sub ResetBtn_Click()
Range(SavedLoc).Interior.ColorIndex = -4142 ' Here
StopTimer = True
Etime = 0
Range(SavedLoc).Value = "00:00:00" ' Here
SavedLoc = nul ' Here
End Sub
Private Sub StopBtn_Click()
Range(SavedLoc).Interior.ColorIndex = 4 ' Here
StopTimer = True
SavedLoc = nul ' Here
Beep
End Sub
Sub NextTick()
If StopTimer Then
'Don't reschedule update
Else
Range(SavedLoc).Value = Format(Etime, "hh:mm:ss") ' Here
SchdTime = SchdTime + OneSec
Application.OnTime SchdTime, "NextTick"
Etime = Etime + OneSec
End If
End Sub
Se você deseja executar timers em várias células simultaneamente,
então fica muito mais complicado,
e você deve consultar os comentários em sua outra pergunta .