Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Timer-Uhr programmieren

Forumthread: Timer-Uhr programmieren

Timer-Uhr programmieren
02.02.2018 12:05:10
Nico
Hallo zusammen,
ich habe in VBA ein etwas längeres Makro programmiert, welches mittlerweile rund 2 Minuten dauert. In der Zwischenzeit wird dem Nutzer eine Userform eingeblendet, mit dem Hinweis "Simulation wird durchgeführt..".
Nun würde ich gerne in diese Userform noch einen Timer einbauen, der die geschätzte Restlaufzeit anzeigt und herunterlaufen lässt.
Heißt z.B. habe ich die Restlaufzeit 2 Mnuten. Dann soll die Uhr in dem Moment in dem die Userform angezeigt wird automatisch von 2 Minuten rückwärts auf 0 laufen.
Hat hier jemand eine Idee?
LG, Nico
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Timer-Uhr programmieren
02.02.2018 12:25:06
Bernd
Servus,
ich würde ggf. nicht auf Zeit, sondern auf "%" des Prozessdurchlaufes wechseln.
Dadurch würden dem Nutzer die Fortschritte angezeigt, aber keine konkrete Restzeit.
Im Code selbst könnte man dann einfach sagen, das das Label mit dem Ladebalken der Userform sich sukzessive bis zu den 100% verlängert...
z.B. so:

Sub test()
UserForm1.Show vbModeless
Dim Breite As Integer
Dim i As Integer
With UserForm1
For i = 0 To 5
Breite = i * 40
Application.Wait (Now + TimeSerial(0, 0, 1))
.Label1.width = Breite
.Repaint
Next a
End With
Unload UserForm1
End Sub

Grüße, Bernd
Anzeige
Über Fortschrittsanzeigen wurde in diesem Forum...
02.02.2018 14:16:53
EtoPHG
schon bis zum Exzess diskutiert. Siehe dazu die Forums-Recherche.
Die allgemeine Feststellung meinerseits:
1) bei den Anfragenden ist zum grössten Teil eine völlig falsche Vorstellung über die Implentierung vorhanden. Auch hier bei deiner: Zitat: mittlerweile rund 2 Minuten Also schätzt du einfach mal 2 Minuten und zählst zurück. a) Muss diese Anzeige asynchron, oder synchron in programmatischen Intervallen, zur eigentlich VBA-Abarbeitung erfolgen.
2) Schätzungen sind immer ungenau. c) Die Anzeigen wiegen den Benutzer meistens in falscher Sicherheit.
3) Einfacher zu implemntieren/programmierung sind Information in der Statusbar von Excel, die aus dem ablaufenden Code Informationen über den Arbeitsfortschritt geben.
Gruess Hansueli
Anzeige
AW: Über Fortschrittsanzeigen wurde in diesem Forum...
02.02.2018 14:47:21
Nico
Vielen Dank für deine Antwort.
Du hast natürlich Recht, dass eine Schätzung immer schlecht bzw. ungenau ist.
War eben mein erster Gedanke, ich kenne den Funktionsumfang von VBA nicht gut genug.
Wenn es eine Möglichkeit gibt, den tatsächlichen Arbeitsfortschritt zu programmieren, wäre das natürlich wesentlich besser und ich wäre Dir sehr dankbar, wenn du mir sagen könntest, wie das dann ungefähr funktionieren soll.
Gruß, Nico
Anzeige
Darüber kann man keine ungefähren Aussagen
02.02.2018 15:03:56
EtoPHG
machen, Nico
Dazu muss ich deinen Code kennen! Nicht mehr und nicht weniger!
Gruess Hansueli
;
Anzeige

Infobox / Tutorial

Timer-Uhr in Excel programmieren


Schritt-für-Schritt-Anleitung

Um einen Timer in Excel VBA zu implementieren, befolge diese Schritte:

  1. Userform erstellen:

    • Öffne den VBA-Editor (Alt + F11).
    • Klicke mit der rechten Maustaste auf „VBAProject (DeineDatei.xlsx)“ und wähle „Einfügen“ > „UserForm“.
    • Füge ein Label hinzu, um die Zeit anzuzeigen, und gestalte die Userform nach deinen Wünschen.
  2. Timer-Funktion einbauen:

    • Füge den folgenden Code in das UserForm-Modul ein:
    Dim TimerEnde As Date
    
    Private Sub UserForm_Activate()
       TimerEnde = Now + TimeValue("00:02:00") ' Setze Timer auf 2 Minuten
       Application.OnTime Now + TimeValue("00:00:01"), "UpdateTimer"
    End Sub
    
    Sub UpdateTimer()
       Dim verbleibendeZeit As TimeSpan
       verbleibendeZeit = TimerEnde - Now
       If verbleibendeZeit > 0 Then
           Me.Label1.Caption = Format(verbleibendeZeit, "nn:ss")
           Application.OnTime Now + TimeValue("00:00:01"), "UpdateTimer"
       Else
           Me.Label1.Caption = "Zeit abgelaufen!"
           Unload Me
       End If
    End Sub
  3. Makro zum Anzeigen der Userform:

    • Füge den folgenden Code in ein Modul ein, um die Userform anzuzeigen:
    Sub StartTimer()
       UserForm1.Show vbModeless
    End Sub
  4. Makro ausführen:

    • Schließe den VBA-Editor und führe das Makro StartTimer aus, um die Userform mit dem Timer anzuzeigen.

Häufige Fehler und Lösungen

  • Fehler: Userform bleibt nicht sichtbar:

    • Stelle sicher, dass du vbModeless verwendest, um die Userform nicht modal zu machen.
  • Fehler: Timer funktioniert nicht:

    • Überprüfe, ob die Timer-Endzeit korrekt gesetzt ist und ob die Application.OnTime-Methoden richtig aufgerufen werden.
  • Fehler: Zeit läuft nicht korrekt:

    • Achte darauf, dass die Systemzeit deines Computers korrekt eingestellt ist.

Alternative Methoden

Anstelle eines Timer-Labels kannst du auch einen Fortschrittsbalken implementieren. Hierbei wird der Fortschritt des Prozesses in Prozent angezeigt. Dies kann durch die Verwendung eines ProgressBar-Controls oder einer einfachen Label-Steuerung erreicht werden, die ihre Breite dynamisch anpasst.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du eine Timer-Uhr in Excel VBA erstellen kannst:

  1. Timer mit Fortschrittsanzeige:

    Sub TimerMitFortschritt()
       Dim i As Integer
       UserForm1.Show vbModeless
       For i = 1 To 120 ' 2 Minuten in Sekunden
           Application.Wait (Now + TimeValue("00:00:01"))
           UserForm1.Label1.Caption = "Restzeit: " & (120 - i) & " Sekunden"
           UserForm1.Repaint
       Next i
       Unload UserForm1
    End Sub
  2. Timer mit Statusanzeige in der Statusleiste: Verwende die Statusleiste von Excel, um den Fortschritt anzuzeigen, während das Makro läuft.

    Sub StatusleisteTimer()
       Dim i As Integer
       For i = 1 To 120
           Application.Wait (Now + TimeValue("00:00:01"))
           Application.StatusBar = "Restzeit: " & (120 - i) & " Sekunden"
       Next i
       Application.StatusBar = False ' Statusleiste zurücksetzen
    End Sub

Tipps für Profis

  • Nutze DoEvents, um die Benutzeroberfläche aktiv zu halten, während dein Timer läuft. Dies ermöglicht es, dass Excel weiterhin reagiert.

  • Experimentiere mit verschiedenen Zeitformaten, um die Anzeige der verbleibenden Zeit anzupassen.

  • Implementiere eine Möglichkeit, den Timer zu pausieren oder zu stoppen, um die Benutzererfahrung zu verbessern.


FAQ: Häufige Fragen

1. Wie kann ich den Timer anpassen, um eine längere Zeit zu zählen?
Du kannst die Zeit in der Zeile TimerEnde = Now + TimeValue("00:02:00") ändern, um die gewünschte Zeit anzugeben.

2. Ist es möglich, den Timer in einer bestimmten Excel-Version zu programmieren?
Ja, die Programmierung in Excel VBA funktioniert in den meisten Versionen von Excel, einschließlich Excel 2010 und neuer.

3. Kann ich den Timer für andere Aufgaben verwenden?
Ja, du kannst den Timer für jede Art von VBA-Projekt verwenden, um den Fortschritt oder die verbleibende Zeit anzuzeigen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige