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

Forumthread: MsgBox automatisch schließen

MsgBox automatisch schließen
25.04.2016 15:10:47
Julian
Hallo zusammen,
ich habe folgendes Problem:
Ich hab eine Messagebox programmiert, welche erscheint wenn ein Wert in Spalte J negativ wird (Daten werden aus anderem Programm ständig aktualisiert).
Um dieses Makro ständig laufen zulassen, habe ich eine ApplicationOnTime hinzugefügt, sodass das Makro ständig neu geprüft wird (alle 15Sec).
Jetzt möchte ich, dass die Messagebox nicht alle 15 Sekunden wieder neu erscheint, bei negativem Wert, sondern nach einmaliger Bestätigung nicht wieder auftaucht. Erst wenn ein weiterer Wert negatv wird, soll wieder eine MsgBox auftauchen.
Hier mein Code:
Sub Makro2()
Dim i As Range
Dim j As Range
For Each i In Range("J:J")
If i  "" Then
If i.Value 
Ich hoffe auf eure Unterstützung!

Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: MsgBox automatisch schließen
25.04.2016 15:21:01
UweD
Hallo
versuch es mal so
Sub MSGBOX_autom()
Dim WsShell, intText As Integer
Set WsShell = CreateObject("WScript.Shell")
intText = WsShell.Popup("Hinweis wird automatisch geschlossen!!!", 5, "Huhu ...", 2 + 48)
' Die 5 in der letzten Zeile gibt die Dauer der Öffnung an.
End Sub

Anzeige
AW: MsgBox automatisch schließen
25.04.2016 15:32:25
Werner
Hallo Uwe,
dann nimm doch eine Userform setz ein Label mit deinem Text auf die Userform und lass die Userform anzeigen.
Sub Makro2()
Dim i As Range
Dim j As Range
For Each i In Range("J:J")
If i  "" Then
If i.Value 
Gruß Werner

Uwe hat geantwortet, Julian gefragt, Werner! orT
25.04.2016 16:13:10
Luc:-?
Gruß, Luc :-?

Anzeige
AW: MsgBox automatisch schließen
25.04.2016 16:26:26
Julian
Hallo Uwe, danke für deine Hilfe.
Problem ist, dass die Msgbox zwingend bestätigt werden muss und nicht automatisch schließen darf.

AW: MsgBox automatisch schließen
25.04.2016 16:37:31
UweD
Ok falsch verstanden. Dein Problem passt eben nicht zur Überschrift.
Werden alle Zeilen neu "gerechnet" oder wird immer nur ein Datensatz unten drangehängt?

Anzeige
AW: MsgBox automatisch schließen
25.04.2016 16:43:01
Julian
Oh ja, sorry mein Fehler!
Die Daten werden laufend aus Bloomberg aktualisiert. Sobald der Kurs aus Spalte G dem Kurs aus Spalte H entspricht bzw überschreitet, wird J zu 0 bzw. negativ. Dann erscheint die MsgBox!
nach einmaliger Bestätigung sollte diese MsgBox geschlossen bleiben, bzw nur noch für andere Zellen sich öffnen.

Anzeige
AW: MsgBox automatisch schließen
25.04.2016 15:38:12
Michael
Hi Julian,
wenn ich es richtig interpretiere, dann so:
Option Explicit
Sub Makro3()
Dim t As Long
' nur um irgendwelche Werte zu haben
For t = 1 To 20: Range("J" & t) = Round(Rnd() * (10) - 1, 0): Next
t = Range("J" & Rows.Count).End(xlUp).Row
'  MsgBox WorksheetFunction.CountIf(Range("J1:J" & t), " 0 Then
MsgBox "AUSFÜHRKURS ERREICHT"
End If
Application.OnTime Now + TimeValue("00:00:15"), "Makro3"
End Sub
Schöne Grüße,
Michael

Anzeige
AW: MsgBox automatisch schließen
25.04.2016 16:28:40
Julian
Hallo Michael,
Vielen Dank für deine Hilfe!
ich habe deinen Sub getestet, leider hat es mir in meinem Sheet dann diverse Zahlen in Spalte J eingetragen und die Messagebox ist weiterhin im 15 Sekunden Takt erschienen.

AW: MsgBox automatisch schließen
25.04.2016 16:44:52
Daniel
Hi
du musst dir die alten Werte in einer statischen Variable (behält ihren Wert auch bei Makroende und steht beim nächsten Aufruf wieder zur verfügung.
dann vergleichst du in einer Schleife die neuen und alten Werte und bringst die Messagebox nur dann, wenn in den neuen Werten ein negativer Wert auftaucht, der in den alten noch nicht vorkommt:
Sub Makro2()
Static arrAlt
Dim arrNeu
Dim i As Long
Dim check As Boolean
arrNeu = ActiveSheet.UsedRange.Columns(10).Value
If IsEmpty(arrAlt) Then ReDim arrAlt(1 To UBound(arrNeu, 1), 1 To UBound(arrNeu, 2))
For i = 1 To UBound(arrNeu, 1)
If IsNumeric(arrNeu(i, 1)) Then
If arrNeu(i, 1)  UBound(arrAlt, 1) Then
check = True
Exit For
ElseIf arrAlt(i, 1) = "" Then
check = True
Exit For
ElseIf arrAlt(i, 1) > 0 Then
check = True
Exit For
End If
End If
End If
Next
arrAlt = arrNeu
If check Then MsgBox "AUSFÜHRKURS ERREICHT"
'Application.OnTime Now + TimeValue("00:00:15"), "Makro2"
End Sub
Gruß Daniel

Anzeige
AW: MsgBox automatisch schließen
25.04.2016 16:58:49
Julian
Hallo Daniel, erstmals vielen Dank für deine Bemühung.
bei deinem Vorschlag entstehen gleich mehrere Probleme.
1. Aktualisiert er nicht mehr im 15Sek Takt und
2. wird hier scheinbar nur noch 1 Zelle geprüft, den er spuckt auch bei drei negativen Werten nur eine Messagebox aus.
Irgendeine Idee?

Anzeige
AW: MsgBox automatisch schließen
25.04.2016 17:05:55
Daniel
Hi
sorry, das Application.OnTime hatte ich für Testzwecke bei mir auskommentiert.
wenn du bei jedem Wert die Messagebox haben willst, dann ersetze im IF-Block alle check = True durch Msgbox "Ausführungskurs errreicht" und lösche das If check Then Msgbox "..." am Ende
Gruß Daniel

Anzeige
AW: Ergänzung
25.04.2016 17:06:48
Daniel
und das Exit FOR löschst du natürlich bitte auch.
Gruß Daniel

AW: Ergänzung
25.04.2016 17:24:59
Julian
Nochmals vielen Dank, aber auch jetzt funktioniert es noch nicht so wie ich es brauche.
Ich habe das ApplicationOntime wieder aktiviert (hab es aber als If-Block gelassen, sodass nur eine MsgBox erscheint!). Nun prüft er im ersten Durchlauf und zeigt mir eine Messagebox (´bei drei negativen Wert). Ein paar Sekunden später prüft er erneut und obwohl keine Veränderung stattgefunden hat, spuckt er nun drei Messageboxes aus.
Vllt liegt es an meinem anderen Code.
Im Modul habe ich momentan folgendes stehen:
Sub Makro4()
Static arrAlt
Dim arrNeu
Dim i As Long
Dim check As Boolean
arrNeu = ActiveSheet.UsedRange.Columns(10).Value
If IsEmpty(arrAlt) Then ReDim arrAlt(1 To UBound(arrNeu, 1), 1 To UBound(arrNeu, 2))
For i = 1 To UBound(arrNeu, 1)
If IsNumeric(arrNeu(i, 1)) Then
If arrNeu(i, 1) If i > UBound(arrAlt, 1) Then
check = True
Exit For
ElseIf arrAlt(i, 1) = "" Then
check = True
Exit For
ElseIf arrAlt(i, 1) > 0 Then
check = True
Exit For
End If
End If
End If
Next
arrAlt = arrNeu
If check Then MsgBox "AUSFÜHRKURS ERREICHT"
Application.OnTime Now + TimeValue("00:00:15"), "Makro2"
End Sub Zusätzlich steht in Tabelle 1:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.OnTime EarliestTime:=TimeValue("00:00:10"), _
Procedure:="Makro2", Schedule:=False
End Sub

Private Sub Workbook_Open()
Application.OnTime Now + TimeValue("00:00:10"), "Makro2"
End Sub

Anzeige
AW: Ergänzung
25.04.2016 17:35:02
Daniel
Hi
du hast meinem Code unter einem neuen Makro abgelegt (Makro4 statt Makro2)
dass du dann natürlich auch die Aufrufe in den Application.Ontimes entsprechend anpassen musst, sollte eigentlich selbstverständlich sein.
Gruß Daniel

AW: Ergänzung
25.04.2016 18:01:27
Julian
Entschuldige den dummen Fehler. Muss erst noch ein bisschen mit VBA vertraut werden.
Deine Beiträge waren sehr hilfreich, funktioniert nun alles nach Plan.
Vielen Dank und schönen Abend
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

MsgBox in Excel VBA automatisch schließen


Schritt-für-Schritt-Anleitung

Um eine MsgBox in Excel VBA automatisch schließen zu lassen, kannst du den folgenden VBA-Code verwenden. Dieser Code zeigt eine MsgBox an, die nach einer bestimmten Zeit geschlossen wird. Dabei wird auch die Anwendung Application.OnTime genutzt, um das Makro regelmäßig auszuführen.

Sub MSGBOX_autom()
    Dim WsShell As Object
    Set WsShell = CreateObject("WScript.Shell")
    WsShell.Popup "Hinweis wird automatisch geschlossen!!!", 5, "Huhu ...", 2 + 48
End Sub

In diesem Beispiel schließt sich die MsgBox nach 5 Sekunden automatisch. Die Zahl „5“ in der Zeile WsShell.Popup gibt die Dauer in Sekunden an.


Häufige Fehler und Lösungen

Fehler 1: Die MsgBox erscheint immer wieder, obwohl bereits eine Bestätigung gegeben wurde.
Lösung: Verwende statische Variablen, um den Status der MsgBox zu speichern. So weiß dein Code, ob die MsgBox bereits angezeigt wurde.

Static msgShown As Boolean
If Not msgShown Then
    MsgBox "AUSFÜHRKURS ERREICHT"
    msgShown = True
End If

Fehler 2: Die MsgBox blockiert die Ausführung des Codes.
Lösung: Statt einer normalen MsgBox kannst du die Popup-Methode verwenden, die die Ausführung des Codes nicht blockiert.


Alternative Methoden

Falls du eine benutzerdefinierte Userform verwenden möchtest, um mehr Kontrolle über die MsgBox zu haben, kannst du eine Userform mit einem Label und einem Timer erstellen. Hier ein Beispiel, wie du das umsetzen kannst:

  1. Erstelle eine Userform mit einem Label, das deinen Text anzeigt.
  2. Füge einen Timer hinzu, der die Userform nach einer bestimmten Zeit schließt.
Private Sub UserForm_Activate()
    Application.Wait (Now + TimeValue("00:00:05")) ' 5 Sekunden warten
    Unload Me ' Userform schließen
End Sub

Praktische Beispiele

Hier ist ein Beispiel, das zeigt, wie du eine MsgBox nur einmal anzeigen kannst, wenn ein Wert in Spalte J negativ wird:

Static lastNegativeValue As Double
Dim currentValue As Double

currentValue = Range("J1").Value ' Beispiel für die erste Zelle in Spalte J

If currentValue < 0 And lastNegativeValue >= 0 Then
    MsgBox "AUSFÜHRKURS ERREICHT"
End If

lastNegativeValue = currentValue

Dieser Code überprüft den Wert in der Zelle und zeigt die MsgBox nur an, wenn ein neuer negativer Wert auftritt.


Tipps für Profis

  • Verwende statische Variablen: Sie helfen dir, den Status von Variablen über mehrere Aufrufe hinweg zu speichern.
  • Nutze Application.OnTime: Damit kannst du deine Makros regelmäßig ausführen und den Timer für die MsgBox steuern.
  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung, um unerwartete Situationen abzufangen, z.B. wenn die Zelle leer ist.

FAQ: Häufige Fragen

1. Kann ich die MsgBox automatisch schließen, ohne sie zu bestätigen?
Ja, du kannst die WScript.Shell.Popup-Methode verwenden, um die MsgBox nach einer bestimmten Zeit automatisch zu schließen.

2. Wie oft kann ich die MsgBox anzeigen lassen?
Du kannst die Anzeige der MsgBox so steuern, dass sie nur erscheint, wenn ein neuer negativer Wert in der entsprechenden Zelle auftritt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige