
Ich bin ein absoluter Anfänger in Excel und VBA und versuche, Code zu erstellen, der mir einen Timer und eine Zellfarbänderung ermöglicht, die auftritt, wenn ich auf meine drei Schaltflächen StartBtn, StopBtn und ResetBtn klicke. Im Moment funktioniert der Code für eine einzelne Zelle B3, aber die Schaltflächen müssen für jede Zelle auf dem Blatt funktionieren, auf die geklickt wird. Ich füge den Code unten ein und hoffe, dass Sie so freundlich sind, den Code durchzugehen und diesen verwirrten Anfänger zu retten.
Code:
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
Antwort1
In Excel können Sie dieAuswahl-Eigenschaft, um anzugeben, was in Ihrem Arbeitsblatt ausgewählt oder aktiv ist.
Beachten Sie jedoch, dass dies später zu Problemen führen kann, da der Code komplexer wird und die selection
Verwendungnormalerweisenicht die beste Methode.
Antwort2
Anstatt Selection
in Ihrem gesamten Code zu verwenden, schlage ich vor, dass Sie verwenden, Selection
um die aktuell ausgewählte Zelle zu identifizieren, wenn Sie Ihren aufrufen StartBtn
, diesen Speicherort speichern und ihn in den anderen Routinen verwenden; z. B.
Dim StopTimer als Boolean SchdTime als Datum dimmen Dimmen Sie Etime als Datum Dim SavedLoc als Variante ' Hier Const OneSec As Date = 1 / 86400# Private Sub StartBtn_Click() Wenn Auswahl.Anzahl <> 1 Dann MsgBox "Bitte wählen Sie eine einzelne Zelle aus." Sub beenden Ende, wenn SavedLoc = Auswahl.Adresse ' Hier Bereich (gespeicherter Ort).Interior.ColorIndex = 6 ' Hier StopTimer = Falsch SchdTime = Jetzt() Bereich (gespeicherter Ort).Wert = Format(Etime, "hh:mm:ss") ' Hier Anwendung.OnTime SchdTime + OneSec, "NächsterTick" End Sub Private Sub ResetBtn_Click() Bereich (gespeicherter Ort).Interior.ColorIndex = -4142 ' Hier StopTimer = True Etime = 0 Bereich (gespeicherter Ort).Wert = "00:00:00" ' Hier Gespeicherter Speicherort = null ' Hier End Sub Private Sub StopBtn_Click() Bereich (gespeicherter Ort).Interior.ColorIndex = 4 ' Hier StopTimer = True Gespeicherter Speicherort = null ' Hier Piep End Sub Sub NächsterTick() Wenn StopTimer Dann 'Update nicht verschieben Anders Bereich (gespeicherter Ort).Wert = Format(Etime, "hh:mm:ss") ' Hier SchdTime = SchdTime + Eine Sekunde Anwendung.OnTime SchdTime, "NächsterTick" Etime = Etime + Eine Sekunde Ende, wenn End Sub
Wenn Sie Timer in mehreren Zellen gleichzeitig ausführen möchten, wird es viel komplizierter und Sie sollten die Kommentare zudeine andere Frage.