1.7k Aufrufe
Gefragt in Tabellenkalkulation von
Folgender Code:

For lngZeile1 = lngLetzte1 To 2 Step -1
If ActiveSheet.Cells(lngZeile1, 1).Value > 0 Then ActiveSheet.Cells(lngZeile1, 1).EntireRow.Delete xlShiftUp
Next lngZeile1

'nun Makro für neuen Durchlauf starten, falls B2 nicht leer ist
If IsEmpty(ActiveSheet.Range("J2")) = False Then Call Lieferscheine_generieren Else
Exit Sub

MsgBox "Sie finden die generierten Lieferscheine unter" & vbCrLf & "W:\ki\ek\wfl\vz-dispo\Importsteuerung\Lieferschein-delivery notes\Lieferscheinexport Makro"

End Sub

Offenbar Beende ich mit dem Code Exit Sub am Ende der Schleife auch das Makro. Somit wird die nachfolgende MSGBox gar nicht ausgeführt. Wenn ich diese aber vor das Exit Sub schreibe, dann wird sie mir angezeigt und ich muss so oft mit o.k. bestätigen, wie auch die Schleife vorher durchlaufen wurde.

Ich möchte dass die Box am Ende angezeigt wird und auch nur 1x mit o.k. bestätigt werden muss.

Habt Ihr ne Idee?

7 Antworten

0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo,

da fehlt aber noch ein End If ;-). So sollte es funktionieren:

'nun Makro für neuen Durchlauf starten, falls B2 nicht leer ist
If IsEmpty(ActiveSheet.Range("J2")) = False Then
Call Lieferscheine_generieren
Else
MsgBox "Sie finden die generierten Lieferscheine unter" & vbCrLf & "W:\ki\ek\wfl\vz-dispo\Importsteuerung\Lieferschein-delivery notes\Lieferscheinexport Makro"
Exit Sub
End If

End Sub


Gruß

M.O.
0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo,

noch mal ich ;-). Oder noch einfacher:

'nun Makro für neuen Durchlauf starten, falls J2 nicht leer ist
If IsEmpty(ActiveSheet.Range("J2")) = False Then Call Lieferscheine_generieren

MsgBox "Sie finden die generierten Lieferscheine unter" & vbCrLf & "W:\ki\ek\wfl\vz-dispo\Importsteuerung\Lieferschein-delivery notes\Lieferscheinexport Makro"

End Sub


Gruß

M.O.
0 Punkte
Beantwortet von
Hi,

wenn ich da EndIf schreibe, kommt eine Fehlermeldung. Endif ohne if oder so ähnlich.

Das zweite was Du schreibst, funktioniert genauso, wie das was ich an Code geschrieben habe. In beiden Fällen muss ich die MSGBox aber so oft mit ok bestätigen, wie Durchläufe in der Schleife stattfinden. Erst dann wird das Makro verlassen. Ich möchte aber nur 1x mit ok bestätigen und dann soll das Makro beendet sein.
0 Punkte
Beantwortet von
Hallo,

leider hast du den Beginn deines Makros nicht gepostet. Kann es sein dass dein Makro Lieferscheine_generieren heißt? In diesem Fall lässt du es mit Call immer wieder sich selbst aufrufen. Nach Exit Sub wird dann die Klammer nach und nach wieder aufgelöst, wodurch jedesmal Msgbox erneut kommt. Setze stattdessen z.B. vor deine Schleife einen Springpunkt Start: und vor Msgbox If … Then Goto Start oder führe gleich die Schleife nur dann aus, wenn die Bedingung eintrifft.

Gruß Mr. K.
0 Punkte
Beantwortet von
Hallo,

in meinem Makro kommt kein Call vor. Ich habe meinen Code ganz am Anfang von diesem Thread gepostet.
0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo Mabon,

in meinem Makro kommt kein Call vor.


Das stimmt wohl nicht ;-):
If IsEmpty(ActiveSheet.Range("J2")) = False Then Call Lieferscheine_generieren Else


Aber die Frage von xlKing, wie dein Makro heißt hast du nicht beantwortet.

Eigentlich sollte dieser Code so funktionieren, wie du willst:

'nun Makro für neuen Durchlauf starten, falls J2 nicht leer ist
If IsEmpty(ActiveSheet.Range("J2")) = False Then
Call Lieferscheine_generieren
Else
MsgBox "Sie finden die generierten Lieferscheine unter" & vbCrLf & "W:\ki\ek\wfl\vz-dispo\Importsteuerung\Lieferschein-delivery notes\Lieferscheinexport Makro"
End If

End Sub


Gruß

M.O.
0 Punkte
Beantwortet von
Hallo,

ja das mit dem Call stimmt dann wohl. Hab ich echt übersehen sorry.

Ich habe den letzten Code jetzt mal eingefügt und es funktioniert genau so, wie ich mir das wünsche. Ich glaube ich habe auch verstanden, an welcher Stelle mein Fehler lag. Danke für Hilfe
...