Implementando 3 macros diferentes em várias células em uma folha por seleção

0

Eu sou um noob completo tanto no Excel quanto no Vba e estou tentando criar um código que possa me dar um temporizador e uma mudança de cor de célula que ocorre quando eu clico em meus três botões StartBtn, StopBtn e ResetBtn. Agora eu tenho o código para trabalhar em uma única célula B3, mas preciso que os botões funcionem para qualquer célula na planilha que é clicada. Eu estou colando o código abaixo e espero que vocês tenham a gentileza de passar pelo código e salvar este noob 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
    
por Suraj 18.09.2015 / 19:08

2 respostas

0

No excel, você pode usar a propriedade seleção para abordar o que está selecionado ou ativo em sua planilha.

Note, no entanto, que isso pode causar problemas mais adiante, à medida que o código se torna mais complexo e usar selection não é geralmente o melhor método.

    
por 20.09.2015 / 12:03
0

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 .

    
por 25.09.2015 / 00:39

Tags