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

Forumthread: VBA MsgBox aufrufen, automatisch schließen

VBA MsgBox aufrufen, automatisch schließen
07.08.2015 07:11:03
Anton
Hallo.
bastle gerade mit VBA eine Berechnung, die bei bestimmtem Ergebnis eine MsgBox einblendet , calculate, ganze Prozedur sieht so aus:

Private Sub worksheet_Calculate()
If Range("B6").Value > 32 Then
msgbox "Bezugszeit" & vbCrLf & "ist zu groß!", vbOKOnly, "HOPPLA"
End If
End Sub

---
Nun habe ich gesehen, dass man diese Box auch timergesteuert nach ein paar Sekunden automatisch ausblenden kann statt mit Klick auf Ok. Wie baue ich das hier mit ein?
Danke f.d Hilfe.
Anton

Anzeige

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA MsgBox aufrufen, automatisch schließen
07.08.2015 07:37:31
Nepumuk
Hallo,
teste mal:
Private Sub worksheet_Calculate()
    Dim objShell As Object
    If Range("B6").Value > 32 Then
        Set objShell = CreateObject("WScript.Shell")
        Call objShell.Popup("Bezugszeit" & vbCrLf & "ist zu groß!", 2, "HOPPLA", vbOKOnly)
        Set objShell = Nothing
    End If
End Sub


Gruß
Nepumuk

Anzeige
AW: VBA MsgBox aufrufen, automatisch schließen
07.08.2015 10:27:26
Anton
Hallo Nepumuk,
spitze, das klappt!
Danke

WsShell.Popup ...
07.08.2015 07:39:15
Matthias
Hallo
Dim Ibox, WsShell
If Range("B6").Value > 32 Then
'Verweis auf "Microsoft Scripting Runtime" erforderlich
Set WsShell = CreateObject("WScript.Shell")
Ibox = WsShell.Popup("Bezugszeit ist zu groß!", 3, "3 Sek Fenster")
End If

Gruß Matthias

Anzeige
AW: WsShell.Popup ...
07.08.2015 07:46:30
Luschi
Hallo Matthias,
diese Info:

'Verweis auf "Microsoft Scripting Runtime" erforderlich
ist falsch, da
Set WsShell = CreateObject("WScript.Shell")
ein 'Late Binding' ist und keinen expliziten Verweis erfordert.
Gruß von Luschi
aus klein-Paris

Anzeige
Info entfernt ...
07.08.2015 08:07:56
Matthias
Hallo Luschi
Habs gerade mal geprüft und Du hast Recht,
Der Verweis ist auch bei mir nicht gesetzt und es funktioniert.
Evtl war es ja früher mal notwendig, stammt noch aus der Zeit um XL2000
Danke. Hab die Info aus meiner Personl.xls entfernt.
Gruß Matthias

Anzeige
AW: WsShell.Popup ...
07.08.2015 10:30:51
Anton
Sieht gut aus, aber
er markiert B6 und meldet "Fehler beim Kompilieren außerhalb einer Prozedur ungültig".

AW: WsShell.Popup ...
07.08.2015 10:53:41
Daniel
Hi
die meisten zeigen hier nur den relevanten Ausschnitt des Codes und lassen gerne mal die Selbstverständlichkeiten wie die Start- und Endzeile des Makros weg.
Auch deswegen weil man davon ausgehen kann, dass du den gezeigten Code ja so nicht alleine als Makro einsetzen willst, sondern in ein grösseres Projekt einfügst.
dh. du musst hier die Start- und Endzeile des Makros selber schreiben und den gezeigten Code dazwischen einfügen:
Sub Test()
... hier dann der Code
End Sub

Anzeige
AW: WsShell.Popup ...
07.08.2015 17:56:58
Anton
Sorry, bin halt doch noch blutiger Anfänger bei VBA.
Nun habe ich es so gemacht
Sub test()
Dim Ibox, WsShell
If Range("B6").Value > 32 Then
'Verweis auf "Microsoft Scripting Runtime" erforderlich
Set WsShell = CreateObject("WScript.Shell")
Ibox = WsShell.Popup("Bezugszeit ist zu groß!", 3, "3 Sek Fenster")
End If
End Sub
Ergebnis: keines, auch keien fehler. Hängt es damit zusammen, dass es nun ein Infobox ist?
Anton

Anzeige
ist denn B6 > 32 ? ...kwT
07.08.2015 20:47:31
Matthias
.

AW: ist denn B6 > 32 ? ...kwT
08.08.2015 17:29:32
Anton
Hallo, auch wenn B6 den Wert von 32 überschreitet, erscheint keine infoBox.
Ehrlich

Funkt doch, siehe Datei...
08.08.2015 17:40:24
robert

Die Datei https://www.herber.de/bbs/user/99427.xlsm wurde aus Datenschutzgründen gelöscht


Anzeige
AW: Funkt doch, siehe Datei...
08.08.2015 18:49:46
Anton
Danke Robert, danke Matthias.
Ja mit direkter Eingabe in B6 klappt das.
Hatte aber eingangs erwähnt, dass dieser Wert in B6 keine Eingabe ist, sondern ein Berechnungsergebnis von drei anderen Zellen. Deshalb auch der erste Ansatz mit sub calculate().
Evtl.liegt da unser Missverständnis ?
Trotzdem danke im Voraus.
Anton

Anzeige
AW: Funkt doch, siehe Datei,mit Formel B6...
08.08.2015 21:51:55
Anton
Alles klar, super danke
Anton
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA MsgBox automatisch schließen mit Timer


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und gehe zu dem Arbeitsblatt, in dem du die MsgBox verwenden möchtest.

  2. Öffne den VBA-Editor mit ALT + F11.

  3. Füge ein neues Modul hinzu oder wähle das Arbeitsblatt, in dem du arbeiten möchtest.

  4. Füge den folgenden Code ein, um die MsgBox automatisch nach einer bestimmten Zeit zu schließen:

    Private Sub Worksheet_Calculate()
       If Range("B6").Value > 32 Then
           Dim objShell As Object
           Set objShell = CreateObject("WScript.Shell")
           objShell.Popup "Bezugszeit ist zu groß!", 3, "HOPPLA", vbOKOnly
           Set objShell = Nothing
       End If
    End Sub
  5. Ändere den Wert in Zelle B6, um die MsgBox zu testen. Wenn der Wert größer als 32 ist, erscheint die MsgBox für 3 Sekunden.


Häufige Fehler und Lösungen

  • Fehler: "Der Bezug ist ungültig"

    • Stelle sicher, dass du den Wert in B6 korrekt berechnest. Wenn B6 ein Ergebnis aus anderen Zellen ist, überprüfe die Formeln.
  • Fehler: MsgBox erscheint nicht

    • Vergewissere dich, dass der Code im richtigen Arbeitsblattmodul steht. Wenn sich die Berechnung nicht ändert, wird die MsgBox nicht aufgerufen.
  • Fehler beim Kompilieren

    • Überprüfe, ob du den gesamten Code (inklusive Sub und End Sub) korrekt eingefügt hast. Beginne den Code mit Sub Test() und schließe ihn mit End Sub.

Alternative Methoden

Eine Alternative zur Verwendung von WScript.Shell ist die Verwendung der eingebauten MsgBox-Funktion. Diese erfordert jedoch einen Klick auf "OK", um geschlossen zu werden. Um eine VBA MsgBox automatisch zu schließen, musst du die Popup-Variante nutzen:

MsgBox "Nachricht", vbOKOnly, "Titel"

Hier wird die MsgBox nicht automatisch geschlossen, daher ist die Verwendung von WScript.Shell effektiver, wenn du einen MsgBox Timer benötigst.


Praktische Beispiele

  1. MsgBox mit Timer:

    Private Sub Worksheet_Calculate()
       If Range("B6").Value > 32 Then
           Dim objShell As Object
           Set objShell = CreateObject("WScript.Shell")
           objShell.Popup "Bezugszeit ist zu groß!", 5, "Warnung", vbOKOnly
       End If
    End Sub

    Dieser Code zeigt die MsgBox für 5 Sekunden an und schließt sie automatisch.

  2. Multiple Bedingungen:

    Private Sub Worksheet_Calculate()
       If Range("B6").Value > 50 Then
           Call MsgBox("Wert über 50!", vbCritical, "Fehler")
       ElseIf Range("B6").Value > 32 Then
           Dim objShell As Object
           Set objShell = CreateObject("WScript.Shell")
           objShell.Popup "Bezugszeit ist zu groß!", 3, "Hinweis", vbOKOnly
       End If
    End Sub

Tipps für Profis

  • Verwende Late Binding: Du musst keinen Verweis auf "Microsoft Scripting Runtime" setzen, wenn du CreateObject("WScript.Shell") verwendest. Dies macht deinen Code flexibler.
  • Fehlerbehandlung einbauen: Nutze On Error Resume Next, um mögliche Laufzeitfehler abzufangen, z.B. wenn das Objekt nicht erstellt werden kann.

    On Error Resume Next
    Set objShell = CreateObject("WScript.Shell")
    On Error GoTo 0

FAQ: Häufige Fragen

1. Wie kann ich den Text in der MsgBox anpassen? Du kannst den Text einfach in der Popup-Funktion ändern, z.B. objShell.Popup "Dein Text hier!".

2. Kann ich die MsgBox für längere Zeit anzeigen lassen? Ja, ändere einfach den Zeitparameter in der Popup-Funktion. Zum Beispiel objShell.Popup "Nachricht", 10 zeigt die MsgBox für 10 Sekunden an.

3. Was kann ich tun, wenn ich die MsgBox nicht schließen kann? Wenn die MsgBox hängt, versuche, Excel neu zu starten. Manchmal kann es helfen, alle offenen Fenster zu schließen und den Prozess neu zu starten.

4. Wie kann ich die MsgBox schließen, bevor der Timer abläuft? Aktuell gibt es keine Möglichkeit, die MsgBox vor Ablauf des Timers programmgesteuert zu schließen. Du musst warten, bis die Zeit abgelaufen ist oder auf "OK" klicken.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige