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

Forumthread: MsgBox mit Counter

MsgBox mit Counter
03.06.2009 20:16:28
Lenni
https://www.herber.de/forum/archiv/904to908/t907588.htm
Moin Excellianer!!
Kann man - mit möglichst einfachen Mitteln - eine MsgBox mit einem Sekunden-Counter erstellen? ...also die Vorgabe variabel in Sekunden im VBA-Text hinterlegen (z.B. 120 Sekunden) und die MsgBox zählt mir diese 120 Sekunden zur 0 (Null) runter?!
Wenn 0 erreicht ist, soll meine Datei geschlossen werden.
---------------------------------
Im Archiv habe ich etwas mit einem UserForm gefunden (http://hajo-excel.de/chCounter3/getfile.php?id=178) und ich finde diese Lösung auch sehr gut, aber der Code ist so umfangreich, dass er mit anderen Strukturen in meiner Mappe kollediert. Deshalb schreibe ich oben auch "mit möglichst einfachen Mitteln" und eigentlich möchte ich eine MsgBox für diese Funktion haben.
Vielen Dank für Eure Hilfe!
Viele Grüße aus dem hohen Norden!
Lenni

PS ...kann es sein, dass das Forum noch nicht "allzu rund läuft"?! Ich habe die Schwierigkeiten in den letzten Tagen mitbekommen und nun schmeißt mich das Forum bei Klick auf "Editieren" nach der "Vorschau" immer aus meinen Beitrag raus... ...oder ist hier eine "Ärger-den-Lenni-Funktion" eingebaut... ;-))
Anzeige

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: MsgBox mit Counter
03.06.2009 20:24:21
Uduuh
Hallo,
das geht nicht. Während eine MsgBox angezeigt wird, stoppt der Code.
Gruß aus’m Pott
Udo

AW: MsgBox mit Counter
03.06.2009 20:29:07
Lenni
Danke Udo!! ...und schade das es nicht geht.
Dann müßte ich das wohl doch mit einem UserForm machen... ...aber das oben bereits erwähnte Beispiel wäre zu Umfangreich.
Weiß denn jemand eine möglichst einfache Variante? Danke!
Gruß
Lenni

Anzeige
AW: MsgBox mit Counter
03.06.2009 20:41:45
Matthias
Hallo Lenni
Vielleicht hilft das ja

Option Explicit
Sub MsgBox_n_Sekunden()
Dim WsShell
Dim intText As Integer, x As Long
Set WsShell = CreateObject("WScript.Shell")
intText = WsShell.Popup("Datei wird nach 120 Sekunden geschlossen,", 120, "Automatisch...")
Thisworkbook.Close
End Sub


Quelle:
https://www.herber.de/forum/archiv/352to356/t353552.htm#353559
Vielleicht vor .Close noch
ThisWorkbook.Saved = True einbauen.
Das simmuliert, das es keine Änderung im Sheet gab.
Gruß Matthias

Anzeige
x as Long war ein Überbleibsel. Weg damit ... owT
03.06.2009 20:44:21
Matthias
AW: x as Long war ein Überbleibsel. Weg damit ... owT
03.06.2009 20:50:01
LukiLeu
Das sähe dann etwa so aus. Die MsgBox wird einfach nach einer Sekunde geschlossen und danach die nächste geöffnet.

Sub Z()
Dim WsShell
Dim i
Dim intText As Integer
Dim Zeit
Zeit = 120 'Zeit festlegen in Sekunden
Set WsShell = CreateObject("WScript.Shell")
For i = 0 To Zeit
intText = WsShell.Popup("Noch " & Zeit - i & " Sekunden", 1, "Zeit")
Next i
ThisWorkbook.Close
End Sub


Anzeige
AW: x as Long war ein Überbleibsel. Weg damit ... owT
03.06.2009 20:53:42
LukiLeu
Das sähe dann etwa so aus. Die MsgBox wird einfach nach einer Sekunde geschlossen und danach die nächste geöffnet.

Sub Z()
Dim WsShell
Dim i
Dim intText As Integer
Dim Zeit
Zeit = 120 'Zeit festlegen in Sekunden
Set WsShell = CreateObject("WScript.Shell")
For i = 0 To Zeit
intText = WsShell.Popup("Noch " & Zeit - i & " Sekunden", 1, "Zeit")
Next i
ThisWorkbook.Close
End Sub


Anzeige
flackert ganz schön,wäre aber :) ne Alternative oT
03.06.2009 20:58:55
Matthias
"Viele Wege führen nach Rom"...
03.06.2009 21:14:32
Lenni
...und wieder mal reibe ich mir die Augen: Mit was für unglaublichen Ideen man hier im Forum zu Zielen kommt!
Super Idee, LukiLeu ...aber leider läuft die Zeit bei mir nicht gleichmäßig runter. Ich vermute mal, dass Dein Vorschlag möglichst freie Systemressourcen benötigt... ...und jede Sekunde weniger wird mit einem VBA-Ton quittiert...
Trotzdem: Die Idee ist Klasse!
Gruß
Lenni

Anzeige
;o)
03.06.2009 21:27:23
Matthias
Anscheinend ist heute die
große "Erfreue-den-Lenni-Funktion" eingebaut... ;-))


;o)


Gruß Matthias
AW: ;o) ...ähhhh...
03.06.2009 21:39:57
Lenni
Ich mach's kurz: Ich schmunzel nicht nur, ich lache mich schlapp!! ...kann man ja auch brauchen, nachdem mich die Forums-Technik so geärgert hat! :-)))
Machs Gut! "Alter Ulker"! ;-)
Gruß
Lenni

Anzeige
...geht auch! Danke Matthias!
03.06.2009 20:56:55
Lenni
Jooo! Danke Matthias! ...das wäre eine "kleinere" Variante ohne visuellen Counter, die aber funktioniert!
Vielen Dank!!
Gruß
Lenni

neue Variante mit UserForm1.Repaint ;o)
03.06.2009 21:21:23
Matthias
Hallo Lenni
Da ist mir doch noch was eingefallen.

Private Sub UserForm_Activate()
Dim x As Long
For x = 120 To 1 Step -1
Label1.Caption = x
UserForm1.Repaint
Application.Wait Now + TimeSerial(0, 0, 1)
Next
ThisWorkbook.Close
End Sub




https://www.herber.de/bbs/user/62203.xls


Gruß Matthias
Anzeige
AW: neue Variante mit UserForm1.Repaint ;o)
03.06.2009 21:36:31
Lenni
Danke Matthias!! ...dass klappt in einer kurz erstellten Einzeldatei!
Ich melde mich morgen Nachmittag noch mal! ...ob ich es in meine Haupt-Datei problemlos "einbauen" kann. Ich möchte auch noch Josefs Vorschlag testen.
Danke nochmals!
Gruß
Lenni

Anzeige
Danke Matthias!!
04.06.2009 17:45:18
Lenni
Hallo nochmal Matthias!
Also erst mal: Nochmals herzlichen Dank! Dein Vorschlag funktioniert!!
Aber sei mir bitte nicht böse, ich habe zu Josefs Vorschlag weiter unten "gegriffen", da in diesem die Möglichkeit des "Abbruchs" besteht!
Das heißt aber nicht, dass Dein Vorschlag nicht gut ist: Er ist Klasse, da er durch seine "Kürze" verblüfft!! ...und deshalb wandert er in mein Archiv!! Den werde ich mit Sicherheit noch mal brauchen können!!
Danke nochmals Matthias!!
Gruß
Lenni

Anzeige
Hallo Lenni ...
04.06.2009 18:57:59
Matthias
Hallo Lenni
"Sei mir nicht böse ... " Ist doch Quatsch, für so etwas braucht man sich doch nicht entschuldigen.
Ist doch "Wurscht", welchen Code Du benutzt. Hauptsache es hilft Dir :o)
Gruß Matthias
O.K.!! Trotzdem: DANKE!! oT
04.06.2009 19:12:49
Lenni
AW: MsgBox mit Counter
03.06.2009 21:12:43
Josef
Hallo Lenni,
hier ein Beispiel mit UF.
https://www.herber.de/bbs/user/62202.xls
Gruß Sepp

Anzeige
AW: MsgBox mit Counter
03.06.2009 21:27:42
Lenni
Moin Josef!!
Schön das Du hier mit dabei bist!! DANKE!! ...und Dein Vorschlag sieht sehr vielversprechend aus! Dein Code ist ja nicht so umfangreich wie ich es "andersbezüglich" oben schon erwähnt habe. Und so hoffe ich, dass sich nichts mit meiner Hauptdatei "beißt"!!
Leider ist die Zeit schon fortgeschritten und ich muss erst mal ins Bett (muss morgen wieder früh raus!).
Ich komme morgen Nachmittag zum ausgiebigen Testen und ich werde Dir auf alle Fälle dann noch eine Rückmeldung hier ins Forum stellen!! Vielen Dank Josef!!
Gruß
Lenni

Anzeige
Danke Josef!!
04.06.2009 17:52:39
Lenni
Hallo nochmals Josef!!
Dein Vorschlag läuft in meiner Hauptdatei problemlos!! ...und ich habe ihn übernommen!!
Du hast sicherlich Matthias seinen Vorschlag weiter oben mitbekommen, der hat mir auch sehr gefallen wegen seiner Kürze. Deiner ist ja nun umfangreicher, aber er bietet die Möglichkeit den Countdown abzubrechen! Das war mir auch wichtig!
Vielen Dank nochmals, Josef!!
Gruß
Lenni

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

MsgBox mit Countdown in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Erstelle ein neues Modul, indem du mit der rechten Maustaste auf "VBAProject" klickst und "Einfügen" > "Modul" wählst.

  3. Füge den folgenden Code in das Modul ein:

    Sub MsgBox_n_Sekunden()
       Dim WsShell
       Set WsShell = CreateObject("WScript.Shell")
       WsShell.Popup "Die Datei wird in 120 Sekunden geschlossen.", 120, "Automatisch..."
       ThisWorkbook.Close
    End Sub
  4. Alternativ kannst du einen einfacheren Excel Counter verwenden, um die Zeit in einer Schleife herunterzuzählen:

    Sub Z()
       Dim WsShell
       Dim i
       Dim Zeit
       Zeit = 120 ' Zeit festlegen in Sekunden
       Set WsShell = CreateObject("WScript.Shell")
       For i = 0 To Zeit
           WsShell.Popup "Noch " & Zeit - i & " Sekunden", 1, "Countdown"
       Next i
       ThisWorkbook.Close
    End Sub
  5. Schließe den VBA-Editor und führe das Makro aus, um die MsgBox mit dem Countdown zu sehen.


Häufige Fehler und Lösungen

  • Fehler: „Während eine MsgBox angezeigt wird, stoppt der Code.“

    • Lösung: Eine MsgBox kann den Code nicht weiterlaufen lassen. Verwende stattdessen WsShell.Popup, um die Zeit herunterzuzählen.
  • Fehler: Zeit wird nicht gleichmäßig angezeigt.

    • Lösung: Der Code benötigt genügend Systemressourcen. Achte darauf, dass keine anderen Programme die Performance beeinträchtigen.

Alternative Methoden

Falls du eine benutzerfreundlichere Lösung suchst, kannst du auch ein UserForm verwenden, um den VBA Countdown Timer anzuzeigen. Hier ein Beispiel:

Private Sub UserForm_Activate()
    Dim x As Long
    For x = 120 To 1 Step -1
        Label1.Caption = x
        UserForm1.Repaint
        Application.Wait Now + TimeSerial(0, 0, 1)
    Next
    ThisWorkbook.Close
End Sub

Ein UserForm ermöglicht dir, die Zeit visuell darzustellen und den Countdown ansprechender zu gestalten.


Praktische Beispiele

Hier sind einige praktische Beispiele, die dir helfen, deinen Excel VBA Counter zu erstellen:

  1. Sekunden Zähler mit einfacher MsgBox:

    Sub SimpleCounter()
       Dim i As Integer
       For i = 10 To 1 Step -1
           MsgBox i & " Sekunden verbleibend."
           Application.Wait Now + TimeValue("00:00:01")
       Next i
       MsgBox "Countdown beendet!"
    End Sub
  2. Timer in einer Schleife:

    Sub TimerWithPopup()
       Dim i As Integer
       For i = 1 To 120
           Application.Wait Now + TimeValue("00:00:01")
           MsgBox "Noch " & (120 - i) & " Sekunden."
       Next i
       ThisWorkbook.Close
    End Sub

Tipps für Profis

  • Nutze Application.Wait, um die Ausführung des Codes für eine bestimmte Zeit zu pausieren.
  • Achte darauf, dass du UserForm1.Repaint verwendest, um das UserForm während des Countdowns zu aktualisieren.
  • Verwende alternative Libraries oder APIs, um erweiterte Funktionen zu integrieren, z.B. eine PHP Messagebox, wenn du mit Webanwendungen arbeitest.

FAQ: Häufige Fragen

1. Wie kann ich die Zeit für den Countdown ändern? Du kannst den Wert in Zeit = 120 einfach anpassen, um die gewünschte Anzahl an Sekunden einzustellen.

2. Gibt es eine Möglichkeit, den Countdown abzubrechen? Ja, wenn du ein UserForm verwendest, kannst du einen Button zum Abbrechen des Countdowns einfügen.

3. Was ist ein einfaches Beispiel für einen Zeichen Counter? Ein Zeichen Counter kann in einer Textbox verwendet werden, um die Anzahl der eingegebenen Zeichen zu zählen und anzuzeigen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige