
Sou um novato completo em Excel e Vba e estou tentando criar um código que possa me fornecer um cronômetro e uma mudança de cor de célula que ocorre quando clico em meus três botões StartBtn, StopBtn e ResetBtn. No momento, fiz o código funcionar para uma única célula B3, mas preciso que os botões funcionem para qualquer célula da planilha em que for clicado. Estou colando o código abaixo e espero que vocês tenham a gentileza de ler o código e salvar esse novato confuso.
Código:
Dim StopTimer As Boolean
Dim SchdTime As Date
Dim Etime As Date
Const OneSec As Date = 1 / 86400#
Private Sub StartBtn_Click()
Range("B3").Interior.ColorIndex = 6
StopTimer = False
SchdTime = Now()
[B3].Value = Format(Etime, "hh:mm:ss")
Application.OnTime SchdTime + OneSec, "Sheet1.NextTick"
End Sub
Private Sub ResetBtn_Click()
Range("B3").Interior.ColorIndex = -4142
StopTimer = True
Etime = 0
[B3].Value = "00:00:00"
End Sub
Private Sub StopBtn_Click()
Range("B3").Interior.ColorIndex = 4
StopTimer = True
Beep
End Sub
Sub NextTick()
If StopTimer Then
'Don't reschedule update
Else
[B3].Value = Format(Etime, "hh:mm:ss")
SchdTime = SchdTime + OneSec
Application.OnTime SchdTime, "Sheet1.NextTick"
Etime = Etime + OneSec
End If
End Sub
Responder1
No Excel você pode usar oseleçãopropriedade para abordar o que está selecionado ou ativo em sua planilha.
Observe, no entanto, que isso pode causar problemas mais adiante, à medida que o código se torna mais complexo e o uso selection
égeralmentenão é o melhor método.
Responder2
Em vez de usar Selection
em todo o seu código, sugiro que você use Selection
para identificar a célula atualmente selecionada ao invocar seu StartBtn
, salve esse local e use-o nas outras rotinas; por exemplo,
Dim StopTimer como booleano Dim SchdTime como data Dim Etime como data Dim SavedLoc como variante ' Aqui Const OneSec como data = 1/86400# Sub StartBtn_Click privado() Se Selection.Count <> 1 Então MsgBox "Selecione uma única célula." Sair do sub Fim se SaveLoc = Seleção.Endereço ' Aqui Intervalo (SavedLoc).Interior.ColorIndex = 6 'Aqui StopTimer = Falso SchdTime = Agora() Intervalo (SavedLoc).Value = Format(Etime, "hh:mm:ss") 'Aqui Application.OnTime SchdTime + OneSec, "NextTick" Finalizar sub Sub ResetBtn_Click() privado Intervalo (SavedLoc).Interior.ColorIndex = -4142 'Aqui StopTimer = Verdadeiro Etempo = 0 Intervalo (SavedLoc).Value = "00:00:00" 'Aqui SaveLoc = nulo ' Aqui Finalizar sub Sub StopBtn_Click() privado Intervalo (SavedLoc).Interior.ColorIndex = 4 'Aqui StopTimer = Verdadeiro SaveLoc = nulo ' Aqui Bip Finalizar sub Sub PróximoTick() Se StopTimer então 'Não reprogramar atualização Outro Intervalo (SavedLoc).Value = Format(Etime, "hh:mm:ss") 'Aqui SchdTime = SchdTime + OneSec Application.OnTime SchdTime, "NextTick" Etempo = Etempo + UmSeg Fim se Finalizar sub
Se você deseja executar temporizadores em várias células simultaneamente, fica muito mais complicado e você deve consultar os comentários emsua outra pergunta.