Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1488to1492
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
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!

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

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

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

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?

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

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.

Anzeige
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?

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

30 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige