Registriert seit: 12.04.2014
Version(en): Office 2010/2013
Hallo, in meinem Makro habe ich eine Schleife eingebaut die 66 Zeilen nach unten durchläuft. jetzt habe ich bemerkt das dieser feste Wert bei manchen Tabellen schlecht ist da es auch schon vor der letzten Zeile Nr 66 schon leere Zellen gibt und das wäre schlecht beim Versand per eMail. Code: For z = 5 To 70 ' normal bis 70 Schleifendurchlauf = 66 x 'Beitrag Beitrag = ActiveSheet.Cells(z, 47) 'Akz akz = ActiveSheet.Cells(z, 49) 'Kind Kind = ActiveSheet.Cells(z, 46) 'Buchungen Buchungen = ActiveSheet.Cells(z, 48) 'Monat Datum = ActiveSheet.Cells(1, 4) Monat = Format(Datum, "mmmm yyyy")
Next z
End With
Wie bekomme ich das hin das z nur bis zur ersten leeren Zelle durchläuft? Gruß Daniel
Gruß Daniel Albert
Finanzberater für Baufinanzierungen
Registriert seit: 12.04.2014
Version(en): Office 365
Hallo
kommen denn nach der ersten leeren Zelle noch befüllte Zellen?
MfG Tom
Registriert seit: 12.04.2014
Version(en): Office 2010/2013
Guten Morgen, nein kann zum Glück nicht mehr vorkommen durch den User "Jockel". Habe ich in folgenden Thread schon lösen können http://www.clever-excel-forum.de/thread-7634.htmlNun fehlt nur noch die Lösung, dass die Schleife keine leeren eMails erzeugt :)
Gruß Daniel Albert
Finanzberater für Baufinanzierungen
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo Daniel, ungefähr so Code: Dim lngLetzteZelle As Long
With ActiveSheet
For Z = 5 To .Cells(.Rows.Count, 1).End(xlUp).Row '70 ' normal bis 70 Schleifendurchlauf = 66 x bezogen auf die Spalte A, bitte anpassen!!!!!!!!! 'Beitrag Beitrag = .Cells(Z, 47) 'Akz akz = .Cells(Z, 49) 'Kind Kind = .Cells(Z, 46) 'Buchungen Buchungen = .Cells(Z, 48) 'Monat Datum = .Cells(1, 4) Monat = Format(Datum, "mmmm yyyy")
Next Z
End With
Gruß Stefan Win 10 / Office 2016
Registriert seit: 12.04.2014
Version(en): Office 2010/2013
13.12.2016, 22:14
(Dieser Beitrag wurde zuletzt bearbeitet: 13.12.2016, 22:15 von Daniel Albert.)
Hallo, funktioniert leider nicht, die schleife läuft weiter: Code: Sub Test() Dim olApp As Object Dim z As Long Dim Empfänger As String Dim Mandatsnummer As String Dim Beitrag As String Dim Monat As String Dim Datum As String Dim Kind As String Dim lngLetzteZelle As Long
Set olApp = CreateObject("Outlook.Application")
With ActiveSheet For z = 5 To .Cells(.Rows.Count, 5).End(xlUp).Row ' normal bis 70 Schleifendurchlauf = 66 x
'Empfänger festelegen Empfänger = ActiveSheet.Cells(z, 41) 'Mandatsnummer erstellen Mandatsnummer = ActiveSheet.Cells(z, 42) 'Beitrag Beitrag = ActiveSheet.Cells(z, 43) 'Kind Kind = ActiveSheet.Cells(z, 44) 'Monat Datum = ActiveSheet.Cells(1, 4) Monat = Format(Datum, "mmmm yyyy")
With olApp.CreateItem(0) Rem Empfänger .To = Empfänger Rem Betreff .Subject = "Ankündigung Abbuchung Differenzbuchung - Mittagsessen für den Vormonat in Höhe von " & Beitrag & " €"
Rem Textkörper (Body) im HTML-Format. (1 = Nur-Text, 2 = HTML, 3 = Rich-Text) .BodyFormat = 2 Rem "<br>" = Zeilenumbruch-Anweisung (nur bei HTML) .HTMLBody = "Sehr geehrte Eltern,<br><br> " & _ "wir werden von Ihrem Konto den Differenzbeitrag für das Mittagessen für den vergangenen Monat (<b>" & Monat & "</b>) in Höhe von <b>" & Beitrag & " Euro</b> abbuchen.<br><br>" & _ "Die Abbuchung findet in den kommenden 5 Tagen über die Mandatsreferenznummer<b> " & Mandatsnummer & "</b> statt.<br><br>" & _ "Mit freundlichen Grüßen<br><br>" & _ "Mittagsbetreuung Penzing - Kassierer - " & .HTMLBody Rem Name des Sendekontos in Anführungszeichen Set .SendUsingAccount = .Session.Accounts.Item("Mittagsbetreuung@.de") Rem Mail sofort senden ' .Send .Display
End With
Next z
End With
End Sub
Die schleife beginnt in Zelle AO5. Ich habe die Inhalte mal in den Zellen darunter gelöscht aber die Schleife läuft weiter Gruß Daniel
Gruß Daniel Albert
Finanzberater für Baufinanzierungen
Registriert seit: 12.03.2016
Version(en): Excel 2003/ 2016
Hallo Daniel Albert
ich denke es gibt drei Lösungen für dein Problem: eine Exit For/Sub oder Goto Anweisung direkt nach der For z=5 Zeile For z = 5 To .Cells(.Rows.Count, 5).End(xlUp).Row If .Cells(z, "AO") = Empty Then Exit For springt aus der For Schleife heraus! Wird verwendet wenn nach Next z noch Befehle kommen If .Cells(z, "AO") = Empty Then Exit Sub verlaesst endgültig das Makro, beendet das Programm! If .Cells(z, "AO") = Empty Then GoTo weiter überspringt den gesamten Code, dafür muss vor Nezt z "Weiter:" steheni mit ":" !!
Bei .Cells(z, "AO") = Empty musst du die gewünschte Leerzelle angeben. Wenns nicht "AO" ist bitte selbst anpassen. Würde mich freuen wenn es klappt!
mfg Gast 123
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo Daniel, ich zitiere mal nur einen Teil deiner Antwort (13.12.2016, 22:14)Daniel Albert schrieb: funktioniert leider nicht, die schleife läuft weiter:
Code: For z = 5 To .Cells(.Rows.Count, 5).End(xlUp).Row ' normal bis 70 Schleifendurchlauf = 66 x
Die schleife beginnt in Zelle AO5. Ich habe die Inhalte mal in den Zellen darunter gelöscht aber die Schleife läuft weiter in dem geänderten Code verweist Du aber auf Spalte E! Cells hat die Syntax Cells( Zeile, Spalte) Übrigens: Eine Zelle, die eine Formel enthält ist nicht leer.
Gruß Stefan Win 10 / Office 2016
Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:1 Nutzer sagt Danke an Steffl für diesen Beitrag 28
• Daniel Albert
Registriert seit: 12.04.2014
Version(en): Office 2010/2013
14.12.2016, 20:43
(Dieser Beitrag wurde zuletzt bearbeitet: 14.12.2016, 21:07 von Daniel Albert.)
Hallo steffi, da muss natrülich 41 hin.
Habe ich gemacht, aber du hast recht da ist eine Formel in dieser Zelle. Wie bekomme ich es dann hin das er trotzdem die Schleife dann beendet ?
Habe gerade von Gast123 den Punkt If .Cells(z, "AO") = Empty Then Exit For
scheint zu funktionieren :)
Werde es mal am WE ausprobieren
Gruß Daniel Albert
Finanzberater für Baufinanzierungen
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo Daniel, wenn es sich um Formel handelt, die dir einen Leerstring zurückgibt versuchs mal so (mit Empty dürfte es nicht funktionieren, das dies Falsch zurückgibt). Code: For z = 5 To .Cells(.Rows.Count, 41).End(xlUp).Row If .Cells(z, 41) = "" Then Exit For
Gruß Stefan Win 10 / Office 2016
Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:1 Nutzer sagt Danke an Steffl für diesen Beitrag 28
• Daniel Albert
|