Office: Schleife wird zu früh beendet

Helfe beim Thema Schleife wird zu früh beendet in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo, in einer Mappe gebe ich über eine UF meine Daten im 1. Blatt ein. Wenn ein bestimmtes Kriterium erfüllt ist, wird die zuletzt eingegebene... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von fette Elfe, 6. Februar 2010.

  1. fette Elfe Erfahrener User

    Schleife wird zu früh beendet


    Hallo,

    in einer Mappe gebe ich über eine UF meine Daten im 1. Blatt ein.
    Wenn ein bestimmtes Kriterium erfüllt ist, wird die zuletzt eingegebene Zeile mittels Makro in ein 2. Blatt kopiert.
    Dort werden ebenfalls mittels Makro, in den Zeilen 5 - 6- 7 Monatssummen aus bestimmten Spalten anhand des Datwertes gebildet, in der entsprechenden Zelle gespeichert, an ein Label übergeben und so angezeigt.
    Soweit scheint alles fehlerfrei zu klappen.


    Allerdings brauche ich noch die Gesamtsummen aus den Zeilen 5 und 6.

    Damit Excel jetzt nicht nochmal die entsprechenden Spalten komplett durchrechnen muss, wollte ich eigentlich die Summen in den Zeilen zusammenrechnen lassen, in einer bestimmten Zelle speichern und auch an ein Label übergeben und so anzeigen lassen.

    In den Schleifen wird zuerst auf die letzte ausgefüllte Zelle in der entsprechenden Zeile geprüft.
    Danach soll die Schleife eigentlich jede ausgefüllte Zelle nacheinander zum Wert einer Variablen addieren.

    Leider steigen die Schleifen aber zu früh aus, arbeiten nicht alle ausgefüllten Zellen ab.


    Auffällig finde ich, dass die Schleife für Zeile 5 genau 5x arbeitet bevor sie aussteigt, und die Schleife für Zeile 6 genau 6x.
    Möglicherweise besteht da ja ein Zusammenhang?


    Code:
    Public Sub SummeFPEingang()
      Dim a As Variant                ' Variable zur Summenbildung
      Dim loLetzte As Long            ' Letzte belegte Zelle
      Dim loZelle As Long             ' Zellenzähler für Schleife
        With Worksheets("Sped. XY")
          'letzte belegte Zelle in Zeile 5
          loLetzte = IIf(IsEmpty(.Cells(5, .Columns.Count)), .Cells(5, .Columns.Count).End(xlToLeft).Row, .Columns.Count)
          'Vergleich beginnt ab Zelle 1
          For loZelle = 1 To loLetzte
            a = a + .Cells(5, loZelle).Value
          Next loZelle
          Cells(1, 1).Value = a
          If a = 0 Then
            Cells(1, 1).Value = 0
          End If
          .LabelFPEingang.Caption = "FP Rein" & "    " & Range("A1").Value
        End With
    End Sub
    Code:
    Public Sub SummeFPAusgang()
      Dim b As Variant                ' Variable zur Summenbildung
      Dim loLetzte As Long            ' Letzte belegte Zelle
      Dim loZelle As Long             ' Zellenzähler für Schleife
        With Worksheets("Sped. XY")
          'letzte belegte Zelle in Zeile 6
          loLetzte = IIf(IsEmpty(.Cells(6, .Columns.Count)), .Cells(6, .Columns.Count).End(xlToLeft).Row, .Columns.Count)
          'Vergleich beginnt ab Zelle 1
          For loZelle = 1 To loLetzte
            b = b + .Cells(6, loZelle).Value
          Next loZelle
          Cells(1, 2).Value = b
          If b = 0 Then
            Cells(1, 2).Value = 0
          End If
          .LabelFPAusgang.Caption = "FP Raus" & "    " & Range("B1").Value
        End With
    End Sub


    Ich hoffe Ihr könnt mir helfen.

    Ich hoffe die Fehlersuche/Hilfe ist auch ohne Beispieldatei möglich.
    Ansonsten muss ich wegen Datenschutz (Firmendaten) halt in einer Kopie eine ganze Menge ändern (würde mir diese Arbeit gerne ersparen wenn möglich).
    Die originalen Namen habe ich im hier angegebenen Code natürlich geändert.
     
    fette Elfe, 6. Februar 2010
    #1
  2. Beverly
    Beverly Erfahrener User
    Hi Achim,

    die Summe kannst du viel einfacher auch ohne Schleife ermitteln:

    Code:
    Public Sub SummeFPEingang()
        Dim loLetzte As Long            ' Letzte belegte Zelle
        With Worksheets("Sped. XY")
          'letzte belegte Zelle in Zeile 5
          loLetzte = IIf(IsEmpty(.Cells(5, .Columns.Count)), .Cells(5, .Columns.Count).End(xlToLeft).Row, .Columns.Count)
          .LabelFPEingang.Caption = "FP Rein" & "    " & Application.Sum(.Range(.Cells(5, 1), .Cells(5, loLetzte)))
        End With
    End Sub
    Bis später,
    Karin
     
    Beverly, 7. Februar 2010
    #2
  3. fette Elfe Erfahrener User
    Ganz lieben Dank Karin,
    klappt super.

    So ist die Anzahl der ausgefüllten Zellen in den Zeilen 5 und 6 wenigstens nicht festgelegt.
    (so eine Lösung hatte ich zwischenzeitlich als Provisorium um erst mal weiterarbeiten zu können)

    Seltsam finde ich das mit den Schleifen dennoch.
    Falls da noch jemand eine Erklärung zu wüsste...
    wäre ich dankbar.
    Das könnte helfen in Zukunft Fehler zu vermeiden.
     
    fette Elfe, 7. Februar 2010
    #3
  4. Beverly
    Beverly Erfahrener User

    Schleife wird zu früh beendet

    Hi Achim,

    warum ist das seltsam? Du lässt doch die Schleife von 1 bis zu letzten belegten Spalte in der betreffenden Zeile laufen, damit die Variable a die Summe aus dem vorhergehenden Wert + dem Wert der Zelle der jeweiligen Spalte aufnimmt - das ist eine ganz logische Vorgehensweise und nichts Mysteriöses.

    Bis später,
    karin
     
    Beverly, 7. Februar 2010
    #4
  5. fette Elfe Erfahrener User

    Hi Karin,
    ich wundere mich ja auch nicht über das was ich die Schleifen machen lassen will, sondern über das was sie tuen.

    Siehe mein erstes Posting direkt über dem Code:

    Im Test hatte ich sowohl in Spalte 5 als auch in Spalte 6 jeweils die ersten 16 (!) Zellen ausgefüllt. Um Fehler auszuschließen hatte ich sie zuerst alle mit "0" gefüllt, und danach per Dateneingabe mit entsprechenden Werten.

    Das alles an 2 verschiedenen tagen und mit x-Rechner-Neustarts um PC-Fehler möglichst auszuschließen.
    Jeweils auch immer die Zellen kontrolliert und die Schreibweise der Schleifen auch mehrfach.

    Es war jedes mal das Gleiche:
    In Zeile 5 läuft die Schleife nur die ersten 5 Zellen und steigt dann aus.
    In Zeile 6 dann die ersten 6 Zellen.
    Ebenso wenn ich das Makro im Einzelschritt verfolge.

    Die Zellen haben alle die gleiche Formatierung und sind nicht ausgeblendet.

    Dieses Verhalten der Schleifen kann ich mir halt nicht erklären, ich finde den Fehler nicht.
    Würde ihn aber gerne finden um ihn beim nächsten mal vermeiden zu können.
     
    fette Elfe, 8. Februar 2010
    #5
  6. Beverly
    Beverly Erfahrener User
    Hi Achim,

    du willst offensichtlich etwas anderes machen als in deinem Code steht (nur den sehe ich und nicht deine Arbeitsmappe) und dort steht:

    In Wirklichkeit aber wolltest du in der Schleife nicht alle Zellen einer Zeile (also von links nach rechts) sondern alle Zellen einer Spalte (von oben nach unten) durchlaufen. Deine Codezeile ermittelt aber die letzte belegte Spalte in der Zeile. Wenn nur 5 Spalten belegt sind, ist bei dir loLetzte = 5 und folglich läuft die Schleife auch nur bis 5.

    Die letzte belegte Zeile einer Spalte (hier Spalte A) ermittelt man mit der folgenden Codezeile:
    Code:
        loLetzte = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
    Bis später,
    Karin
     
    Beverly, 8. Februar 2010
    #6
  7. fette Elfe Erfahrener User
    Wirklich ganz lieben Dank für Deine Bemühungen Karin,
    aber ich glaube Du hast recht: so wird das nichts

    Da bisher kein Fehler in meinem Code gefunden wurde, gehe ich davon aus das auch keiner drinn ist.
    Demzufolge wollte ich auch nichts anderes machen als in meinem Code steht.

    Nirgendwo habe ich von Spalten geschrieben.
    Ich wollte keine Spalten durchsuchen sondern Zeilen.
    Und zwar mit einer Schleife die Zeile 5 und mit der anderen Schleife die Zeile 6, und so 2 Ergebnisse bekommen.

    Nur, wenn kein Fehler im Code ist, die Zellen A5 bis P5 ausgefüllt (also nicht leer) sind, warum bricht die Schleife nach 5 Durchläufen (also nach Bearbeitung von A5 bis E5) ab und bearbeitet die anderen 11 ausgefüllten Zellen nicht?
    Die andere Schleife hat in Zeile 6 von A6 bis F6, also 6x gearbeitet, obwohl A6 bis P6 ausgefüllt waren.

    Ich hoffe es ist nun verständlich geschrieben.

    Ich vermute inzwischen auch, das mir hier niemand eine Antwort darauf geben kann, ich fand es nur äußerst auffällig das in Zeile 5 genau 5x und in Zeile 6 genau 6x gearbeitet wird (reproduzierbar).
    Deshalb dachte ich, ich hätte einen Fehler im Code.

    Aber vermutlich ist der Fehler entweder irgendwo ganz anders in den Tiefen meiner Datei versteckt, oder es ist ein Bug, oder irgendein Problem von meinem PC oder von Excel was es so auf keinem anderen Rechner gibt.
     
    fette Elfe, 8. Februar 2010
    #7
  8. fette Elfe Erfahrener User

    Schleife wird zu früh beendet

    Irgendwie lässt es mir nun doch keine Ruhe.
    Ich habe gerade die beiden o.g. Schleifen nochmal in meinen Code eingebaut...
    der gleiche Fehler passiert wieder.

    Ich mache eine Testdatei zum Vorzeigen fertig und lade sie nachher hier hoch, vielleicht kommt ja doch noch jemand diesen "arbeitsfaulen Schleifen" auf die Schliche.
     
    fette Elfe, 8. Februar 2010
    #8
  9. fette Elfe Erfahrener User
    Sry, hat etwas gedauert die Datei fürs Forum zurecht zu stutzen.

    Im Original hat sie 1,55MB, erlaubt sind hier aber nur 256KB als Anhang und externe Links sind ja leider verboten/nicht erwünscht.
    Deshalb bitte ich nicht wundern, ich habe alles entfernt was nicht absolut zum Testen notwendig ist. Es war echt nicht ganz einfach die Datei so klein zu bekommen. Deshalb sieht jetzt einiges sehr merkwürdig aus.



    Zum Problem:
    Im Blatt "Sped. DHL" oben links zeigen die beiden großen Labels "FP Rein" und "FP Raus" die Werte 7 und 9. Dementsprechend zeigt das Label "FP Rein-Raus" den Wert -2. ( 7 - 9 = -2 )
    Genau diese Labels werden durch die angesprochenen Schleifen befüllt.

    Laut den eingegebenen Daten müssten die beiden ersten aber beide den Wert 24 zeigen und das dritte dementsprechend den Wert 0. ( 24 - 24 = 0 )




    Die beiden "arbeitsfaulen Schleifen":
    Public Sub SummeFPDHLEingang()
    Public Sub SummeFPDHLAusgang()

    sind im Modul5 als 5. und 6. Sub von oben zu finden.


    Der auslösende Fehler kann übrigens nicht in irgendetwas versteckt sein, was ich jetzt gelöscht habe um die Datei fürs Forum klein genug zu bekommen.
    Ich habe erst alles gelöscht und danach die Daten eingegeben.
    Der Fehler tritt trotzdem auf.


    Wenn noch Fragen sind, immer her damit.
     
    fette Elfe, 8. Februar 2010
    #9
  10. Beverly
    Beverly Erfahrener User
    Hi Achim,

    vergleiche diese beiden Codezeilen

    dein Code:
    Code:
    IIf(IsEmpty(.Cells(5, .Columns.Count)), .Cells(5, .Columns.Count).End(xlToLeft).Row, .Columns.Count)
    der korrekte Code:
    Code:
    IIf(IsEmpty(.Cells(5, .Columns.Count)), .Cells(5, .Columns.Count).End(xlToLeft).Column, .Columns.Count)
    Bis später,
    Karin
     
    Beverly, 9. Februar 2010
    #10
  11. fette Elfe Erfahrener User
    Oh Mann! *mitKoppvorWandlauf*

    Dankeschön Karin.

    Ich hab den Code x-mal überprüft und es nicht gesehen...
    irgendwann wird man betriebsblind.

    Das kommt davon wenn man faul sein will und ähnliche Code-Zeilen kopiert und nur abändert, anstatt sie einzutippen.

    (wenigstens kann ich jetzt wieder ruhig schlafen *lach*)
     
    fette Elfe, 9. Februar 2010
    #11
Thema:

Schleife wird zu früh beendet

Die Seite wird geladen...
  1. Schleife wird zu früh beendet - Similar Threads - Schleife früh beendet

  2. Verkettung von Zellen - Schleife

    in Microsoft Excel Hilfe
    Verkettung von Zellen - Schleife: Hallo, folgendes Problem: Ich möchte in einer Tabelle die Texte in Spalte A mit den Texten in Spalte B verketten. Dazu benutze ich folgenden Code: Sub VerkettungAB() Range("E2").Value =...
  3. While-Schleife wird nicht beendet

    in Microsoft Access Hilfe
    While-Schleife wird nicht beendet: Hallo Forum Ein aus einem Unterformular soll in ein Feld im Hauptformular übernommen (fix abgespeichert) werden. Das Feld wurde nachträglich im Hauptformular (+ Tabelle) eingefügt. Nun habe ich...
  4. For Next Schleife

    in Microsoft Excel Hilfe
    For Next Schleife: Hallo zusammen, da bin ich wieder und wie kann es anders sein mit einem Problem. Ich habe eine Tabelle (im Anhang) dort soll die Werte in Zellen a/b/f kopiert werden und in die erste frei Zeile...
  5. VBA Schleife kopieren und einfügen von Spalten

    in Microsoft Excel Hilfe
    VBA Schleife kopieren und einfügen von Spalten: Hallo Zusammen, Ich habe auf einem Tabellenblatt eine variable Anzahl an Spalten mit Daten die auch eine variable Anzahl an Zeilen haben, auch mit Lücken in den Zeilen. Die Spalten mit den Infos...
  6. Eine Schleife mit zwei tebellen vba Access

    in Microsoft Access Hilfe
    Eine Schleife mit zwei tebellen vba Access: Hallo zusammen! Es gibt’s zwei Tabellen und ich wollte aus zweiter Tabelle die Daten nach einem Kriterium (FLTR=0) an erste Tabelle übertragen (kopieren). Geht aber nicht. Hier ist mein Kode,...
  7. Bestimmte Daten zwischen innerhalb eines Datumsbereichs einer Tabelle Anfügen

    in Microsoft Access Hilfe
    Bestimmte Daten zwischen innerhalb eines Datumsbereichs einer Tabelle Anfügen: Hallo, ich habe per Google und Foren SuFu leider nichts passendes finden können, wage aber zu bezweifeln, dass Access da an seine Grenzen kommt, da es eigentlich recht banal ist. Ich habe eine...
  8. VBA Loop : Werte suchen und löschen

    in Microsoft Excel Hilfe
    VBA Loop : Werte suchen und löschen: Hallo zusammen, ich habe folgende Ausgangslage: Im Tabellenblatt Auswahl sollen Artikel eingegeben werden und via Formel wird der zugehörige Lagerplatz ausgegeben (funktioniert soweit), sodass...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden