Implementando 3 macros diferentes em múltiplas células em uma planilha por seleção

Implementando 3 macros diferentes em múltiplas células em uma planilha por seleção

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 Selectionem todo o seu código, sugiro que você use Selectionpara 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.

informação relacionada