Hallo
ich möchte eine excel tabelle erstellen mit 5 timern (countdowns) 33,17,12,2,1 min, wobei der nächste timer erst dann anfangen soll wenn der vorherige bei 0 ist
bisher habe ich mich durch tourials durchgequält und folgenden code gebastelt:
Sub StartTimer()
Application.OnTime Now + TimeValue("00:00:01"), "aa"
End Sub
Sub aa()
If Range("c5").Value = 0 Then Exit Sub
Range("c5").Value = Range("c5").Value - TimeValue("00:00:01")
StartTimer
End Sub
Sub StartTimertwo()
Application.OnTime Now + TimeValue("00:00:01"), "ab"
End Sub
Sub ab()
If Range("c7").Value = 0 Then Exit Sub
Range("c7").Value = Range("c7").Value - TimeValue("00:00:01")
StartTimertwo
End Sub
Sub StopTimer()
Application.OnTime Now + TimeValue("00:00:01"), "aa", Schedule:=False
End Sub
bei der zeile
If Range("c5").Value = 0 Then Exit Sub beende ich die funktion die "runterzählt". nun möchte ich zusätzlich, dass wenn 0 erreicht wird das nächste feld (in meinem fall c7) auf 17:00 gestellt wird und sub ab() ausgeführt wird.
hoffe habe mich verständlich genug ausgedrückt
vielen dank im voraus für jegliche Hilfe
Rjinxil
Hallo Rjinxil,
ich würde es so machen:
' **************************************************************
' Modul: mTimer Typ = Allgemeines Modul
' **************************************************************
Option Explicit
Dim iTimerSet As Double
Sub StartTimer()
If iTimerSet = 0 Then
'33,17,12,2,1 min
Range("C5").NumberFormat = "[mm]:ss"
Range("C5").Value = TimeValue("00:33:00")
Range("C7").NumberFormat = "[mm]:ss"
Range("C7").Value = TimeValue("00:17:00")
Range("C9").NumberFormat = "[mm]:ss"
Range("C9").Value = TimeValue("00:12:00")
Range("C11").NumberFormat = "[mm]:ss"
Range("C11").Value = TimeValue("00:02:00")
Range("C13").NumberFormat = "[mm]:ss"
Range("C13").Value = TimeValue("00:01:00")
Else
If Range("C5").Value > 0 Then
Range("C5").Value = Range("C5").Value - TimeValue("00:00:01")
ElseIf Range("C7").Value > 0 Then
Range("C7").Value = Range("C7").Value - TimeValue("00:00:01")
ElseIf Range("C9").Value > 0 Then
Range("C9").Value = Range("C9").Value - TimeValue("00:00:01")
ElseIf Range("C11").Value > 0 Then
Range("C11").Value = Range("C11").Value - TimeValue("00:00:01")
ElseIf Range("C13").Value > 0 Then
Range("C13").Value = Range("C13").Value - TimeValue("00:00:01")
End If
End If
If Range("C13").Value > 0 Then
iTimerSet = Now + TimeValue("00:00:01")
Application.OnTime iTimerSet, "StartTimer", , True
Else
On Error Resume Next
Application.OnTime iTimerSet, "StartTimer", , False
On Error GoTo 0
iTimerSet = 0
End If
End Sub
Sub PauseTimer()
On Error Resume Next
Application.OnTime iTimerSet, "StartTimer", , False
On Error GoTo 0
End Sub
Sub StopTimer()
On Error Resume Next
Application.OnTime iTimerSet, "StartTimer", , False
On Error GoTo 0
iTimerSet = 0
End Sub
Code eingefügt mit: Excel Code Jeanie
Lies Dir dazu unbedingt auch das hier durch:
Applicaton.OnTime - Zeitgesteuerte Makros
Gruß Uwe
Hey
vielen dank genau so habe ich es mir vorgestellt. (leider war mein Ansatz wohl nicht wirklich nützlich :22:)
eine Kleinigkeit fehlt jedoch. sobald der letzte Timer durch ist soll er von vorne anfangen (wieder alles reseten und den 33ger Timer laufen).
erster Ansatz war unter der zeile "Range("C13").Value = Range("C13").Value - TimeValue("00:00:01")" ein "Else: StartTimer" einzufügen aber es geht nicht
und eine frage habe ich noch: ich brauche das ganze 5 mal in einer Tabelle. kann ich es bedenkenlos Copytesten und nur die Variablen ändern?
Gruss
*edit: das mit dem variablen ändern und copy pasten hat geklappt, jetzt nur noch der reset
Hallo Rjinxil,
mit Reset (= Endlosschleife) dann so:
Option Explicit
Dim iTimerSet As Double
Sub StartTimer()
If iTimerSet = 0 Then
'33,17,12,2,1 min
Range("C5").NumberFormat = "[mm]:ss"
Range("C5").Value = TimeValue("00:00:03")
Range("C7").NumberFormat = "[mm]:ss"
Range("C7").Value = TimeValue("00:00:02")
Range("C9").NumberFormat = "[mm]:ss"
Range("C9").Value = TimeValue("00:00:03")
Range("C11").NumberFormat = "[mm]:ss"
Range("C11").Value = TimeValue("00:00:02")
Range("C13").NumberFormat = "[mm]:ss"
Range("C13").Value = TimeValue("00:00:03")
Else
If Range("C5").Value > 0 Then
Range("C5").Value = Range("C5").Value - TimeValue("00:00:01")
ElseIf Range("C7").Value > 0 Then
Range("C7").Value = Range("C7").Value - TimeValue("00:00:01")
ElseIf Range("C9").Value > 0 Then
Range("C9").Value = Range("C9").Value - TimeValue("00:00:01")
ElseIf Range("C11").Value > 0 Then
Range("C11").Value = Range("C11").Value - TimeValue("00:00:01")
ElseIf Range("C13").Value > 0 Then
Range("C13").Value = Range("C13").Value - TimeValue("00:00:01")
End If
End If
If Range("C13").Value > 0 Then
iTimerSet = Now + TimeValue("00:00:01")
Application.OnTime iTimerSet, "StartTimer", , True
Else
iTimerSet = 0
Application.OnTime Now, "StartTimer", , True
End If
End Sub
Sub PauseTimer()
On Error Resume Next
Application.OnTime iTimerSet, "StartTimer", , False
On Error GoTo 0
End Sub
Sub StopTimer()
On Error Resume Next
Application.OnTime iTimerSet, "StartTimer", , False
On Error GoTo 0
iTimerSet = 0
End Sub
Gruß Uwe
Hey.
vielen Dank läuft jetzt genau wie es soll.
ich möchte nun ein weiteres Feld einbauen, welches abhängig von der Restzeit des 33 min timers einen text anzeigt:
wenn timer 30:00-33:00 text1
wenn timer 25:30-30:00 text2
etc
ist sowas ohne grosse Umstände möglich?
Gruss
Hallo,
Option Explicit
Dim iTimerSet As Double
Sub StartTimer()
'wenn timer 30:00-33:00 text1
'wenn timer 25:30-30:00 text2
'etc
If iTimerSet = 0 Then
'33,17,12,2,1 min
Range("C5").NumberFormat = "[mm]:ss"
Range("C5").Value = TimeValue("00:33:00")
Range("B5").Value = "Text 1"
Range("C7").NumberFormat = "[mm]:ss"
Range("C7").Value = TimeValue("00:17:00")
Range("C9").NumberFormat = "[mm]:ss"
Range("C9").Value = TimeValue("00:12:00")
Range("C11").NumberFormat = "[mm]:ss"
Range("C11").Value = TimeValue("00:02:00")
Range("C13").NumberFormat = "[mm]:ss"
Range("C13").Value = TimeValue("00:01:00")
Else
If Range("C5").Value > 0 Then
Range("C5").Value = Range("C5").Value - TimeValue("00:00:01")
If Range("C5").Value > TimeValue("00:30:00") Then
'Range("B5").Value = "Text 1"
ElseIf Range("C5").Value > TimeValue("00:25:30") Then
Range("B5").Value = "Text 2"
ElseIf Range("C5").Value > TimeValue("00:20:00") Then
Range("B5").Value = "Text 3"
ElseIf Range("C5").Value > TimeValue("00:00:00") Then
Range("B5").Value = "Text 4"
End If
ElseIf Range("C7").Value > 0 Then
Range("C7").Value = Range("C7").Value - TimeValue("00:00:01")
ElseIf Range("C9").Value > 0 Then
Range("C9").Value = Range("C9").Value - TimeValue("00:00:01")
ElseIf Range("C11").Value > 0 Then
Range("C11").Value = Range("C11").Value - TimeValue("00:00:01")
ElseIf Range("C13").Value > 0 Then
Range("C13").Value = Range("C13").Value - TimeValue("00:00:01")
End If
End If
If Range("C13").Value > 0 Then
iTimerSet = Now + TimeValue("00:00:01")
Application.OnTime iTimerSet, "StartTimer", , True
Else
iTimerSet = 0
Application.OnTime Now, "StartTimer", , True
End If
End Sub
Sub PauseTimer()
On Error Resume Next
Application.OnTime iTimerSet, "StartTimer", , False
On Error GoTo 0
End Sub
Sub StopTimer()
On Error Resume Next
Application.OnTime iTimerSet, "StartTimer", , False
On Error GoTo 0
iTimerSet = 0
End Sub
Gruß Uwe
Hey
läuft alles wie ich es wollte jetzt.
eine kleine Sache nervt allerdings extrem. wenn ich ein anderes excel Dokument öffne werden die funktionen dort ausgeführt.
wie kann ich es auf dieses Dokument einschränken
Gruss