Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Schleife soll bei erster leeren Zelle stoppen
#1
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
Antworten Top
#2
Hallo

kommen denn nach der ersten leeren Zelle noch befüllte Zellen?

MfG Tom
Antworten Top
#3
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.html

Nun fehlt nur noch die Lösung, dass die Schleife keine leeren eMails erzeugt :)
Gruß Daniel Albert

Finanzberater für Baufinanzierungen
Antworten Top
#4
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
Antworten Top
#5
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
Antworten Top
#6
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
[-] Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:
  • Daniel Albert
Antworten Top
#7
Hallo Daniel,

ich zitiere mal nur einen Teil deiner Antwort

(13.12.2016, 21: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:
  • Daniel Albert
Antworten Top
#8
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
Antworten Top
#9
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:
  • Daniel Albert
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste