VBA Message-Box mit zwei Bedingungen?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Ich verstehe den Abluaf nicht. Erst gehst Du durch die Liste aller termine und baust einen String zusammen, der alle überfälligen und bald fälligen Termine enthält, unabhängig davon, ob die Aufgabe erledigt ist oder nicht.

Dann prüfst Du den Status und wenn irgenein Status "abgeschlossen" lautet, setzt Du ein Flag.

Versuche doch mal folgenden Code:

Option Explicit
Private Sub Worksheet_Activate()
 Dim rDatTermin
 ' Dim rDatStand
 Dim sMsgBaldFaellig As String
 Dim sMsgUeberFaellig As String
 'Dim sMsgAbgeschlossen As String
 sMsgBaldFaellig = ""
 sMsgUeberFaellig = ""
 
For Each rDatTermin In Range("K4:K500")
 If Cells(rDatTermin.Row, 14) <> "abgeschlossen" Then
   If rDatTermin.Value <> "" Then
     If rDatTermin.Value < Date Then
       sMsgUeberFaellig = sMsgUeberFaellig & Cells(rDatTermin.Row, 2) & vbCrLf
     Else
       If rDatTermin.Value <= Date + 14 Then _
         sMsgBaldFaellig = sMsgBaldFaellig & Cells(rDatTermin.Row, 2) & vbCrLf
        End If 
    End If
   End If
 End If
Next

 If sMsgUeberFaellig <> "" Or sMsgBaldFaellig <> "" Then
   MsgBox "Überfällig" & vbCrLf & vbCrLf & sMsgUeberFaellig & "Bald fällig" & vbCrLf & sMsgBaldFaellig
 End If
End Sub

Klappt es? Freue mich auf Feedback.

wolffbastian 
Fragesteller
 15.10.2020, 09:06

Besten Dank, manchmal ist die Lösung so einfach. Und ja, da hatte ich ein dickes Brett vor'm Kopf.

0

In der Logik deines Quelltextes sehe ich einen Irrtum.

Als erstes gehst du die Range K4:K500 durch und prüfst ob das Feld und Heute+14 < als Heute ist.

Danach schaust du ob irgendwein Feld in Range N4:N500 'Abgeschlossen' ist, für mich macht das keinen Sinn.

Ausserdem solltest Du nicht pauschal 500 als das Ende annehmen, da du den Computer unnötige Arbeit machen lasst. Verwende

Cells(Rows.Count, 1).End(xlUp).Row
Woher ich das weiß:eigene Erfahrung

Das und-Zeichen (&) ist in VBA nur dafür gut, Strings zu verketten. Wenn du mehrere Bedingungen mit einem UND verbinden willst, musst du das Schlüsselwort "And" benutzen.

Also

If sMsgUeberFaellig & sMsgBaldFaellig <> "" & sMsgAbgeschlossen <> 1 Then

austauschen mit

If sMsgUeberFaellig And sMsgBaldFaellig <> "" And sMsgAbgeschlossen <> 1 Then

Das wird wahrscheinlich schon alles sein.

Was ich auch wichtig finde: Schreib immer ganz oben über den Code "Option Explicit". Dann sagt dir VBA Bescheid, falls du irgendwelche Variablen benutzt, die VBA nicht kennt (passiert manchmal bei Schreibfehlern).

geri3d  14.10.2020, 12:03
If sMsgUeberFaellig <> "" And sMsgBaldFaellig <> "" And sMsgAbgeschlossen <> 1 Then
3
geri3d  14.10.2020, 12:27
@daCypher
If sMsgUeberFaellig & sMsgBaldFaellig <> "" And sMsgAbgeschlossen <> 1 Then

wäre das selbe

2