Implementieren von 3 verschiedenen Makros auf mehreren Zellen in einem Blatt durch Auswahl

Implementieren von 3 verschiedenen Makros auf mehreren Zellen in einem Blatt durch Auswahl

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 selectionVerwendungnormalerweisenicht die beste Methode.

Antwort2

Anstatt Selectionin Ihrem gesamten Code zu verwenden, schlage ich vor, dass Sie verwenden, Selectionum 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.

verwandte Informationen