Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Überlauf bei Cells(Rows.Count, 3).End(xlUp).Row

Forumthread: Überlauf bei Cells(Rows.Count, 3).End(xlUp).Row

Überlauf bei Cells(Rows.Count, 3).End(xlUp).Row
08.05.2014 18:06:57
junior
Hallo,
habe ein Problem mit folgender Zeile:
    Dim NoOfRows As Integer
NoOfRows = WKS.Cells(Rows.Count, 3).End(xlUp).Row

Komisch ist, dass es auf dem PC mit Office 2003 wo ich es programmiert habe läuft und auf einem anderen PC mit Office 2007 es zur Fehlermeldung 6 Überlauf kommt.
Obwohl die letzte Zeile gerade mal Zeilennummer 97 ist.
Im Debugmodus steht
NoOfRows = 0
Rows.Count = 65536
xlUp = -4162
komme da nicht weiter!!!
Ist es irgendein Problem wegen Office 2003 und 2007?

Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Überlauf bei Cells(Rows.Count, 3).End(xlUp).Row
08.05.2014 18:11:07
Hajo_Zi
die Variable für die Zeile sollte auch als Long definiert werden, integer ist zu klein.

AW: Überlauf bei Cells(Rows.Count, 3).End(xlUp).Row
09.05.2014 09:36:37
Junior
Ok,
Aber ich brauche keine 32xxx Zellen. Integer reicht total aus.
Und es hat ja die ganze Zeit auf Office 2003 funktioniert.
Ist das dann ein Office 2007 Problem?

Anzeige
Überlauf bei Cells(Rows.Count, 3).End(xlUp).Row
09.05.2014 09:40:34
Hajo_Zi
Nein. Du hast mehr Ahnung als ich dann mache es nach Deinem Willen. Beschwere Dich aber nicht.
Gruß Hajo

AW: Überlauf bei Cells(Rows.Count, 3).End(xlUp).Row
12.05.2014 10:49:22
junior
Hallo,
es funktioniert jetzt!
Es lag daran, dass ich eine Liste bis zur letzten Zeile erstellt habe.
Verstehe auch nicht genau wieso es so ist aber vielleicht kann mir dies jemand erklären?
In der letzten Zeile war definitiv nichts eingetragen. Der letzte Eintrag war in Zeile 102. Nachdem ich die Liste bis zum letzten Eintrag korregiert habe funktioniert es.
@hajo:
Nimm das nicht persönlich! Und DANKE!

Anzeige
AW: lieber long als integer
09.05.2014 09:50:24
Daniel
Die Verwendung von Integer hat gegenüber Long keine Vorteile, nur den Nachteil des kleineren Zahlenbereichs.
Gruß Daniel

AW: lieber long als integer
12.05.2014 07:57:32
junior
Hallo,
habe es auf long geändert!
bei Office 2003 funktioniert es weiterhin. Bei Office 2007 kommt es jetzt nicht mehr zum Überlauf aber NoOfRows ist gleich 65536!
Also müsste in meiner letzten Zeile was stehen, oder?
Woran kann dies liegen?

Anzeige
AW: lieber long als integer
12.05.2014 09:36:41
junior
Hallo,
habe es auf long geändert!
bei Office 2003 funktioniert es weiterhin. Bei Office 2007 kommt es jetzt nicht mehr zum Überlauf aber NoOfRows ist gleich 65536!
Also müsste in meiner letzten Zeile was stehen, oder?
Woran kann dies liegen?

AW: lieber long als integer
12.05.2014 14:39:27
Daniel
Hi
beim Wechsel von Excel 2003 auf 2007 muss man beachten, dass die neuen Blätter wesentlich mehr Zeilen haben und wenn man noch alte Dateien bearbeitet, muss man darauf achten, dass man die letzte Zeilennummer auch auf dem richtigen Tabellenblatt ermittelt:
NoOfRows = WKS.Cells(WKS.Rows.Count, 3).End(xlUp).Row
die so beschriebene Methode funktioniert nur, wenn die letzte Zelle nicht beschrieben ist.
Wenn das der Fall sein kann (was aber aber die Ausnahme ist), müsste man so programmieren:
With WKS.Cells(WKS.Rows.Count, 3)
if .Formula = "" Then
NoOfRows = .End(xlUP).Row
else
NoOfRows = .Row
End If
End With
Gruß Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Überlauf bei Cells(Rows.Count, 3).End(xlUp).Row in VBA


Schritt-für-Schritt-Anleitung

  1. Variable definieren: Stelle sicher, dass Du die richtige Datentyp-Definition verwendest. Verwende Long anstelle von Integer, um Überlaufprobleme zu vermeiden:

    Dim NoOfRows As Long
  2. Code zum Ermitteln der letzten Zeile: Nutze den folgenden Code, um die letzte befüllte Zeile in Spalte 3 zu ermitteln:

    NoOfRows = WKS.Cells(WKS.Rows.Count, 3).End(xlUp).Row
  3. Überprüfung: Stelle sicher, dass die letzte Zelle in der Spalte 3 leer ist, wenn Du den Wert ermittelst. Ansonsten kann es zu unerwarteten Ergebnissen kommen.

  4. Debugging: Wenn NoOfRows den Wert 65536 anzeigt, bedeutet das, dass die letzte Zelle nicht leer ist oder dass Du die Methode auf einem nicht aktiven Arbeitsblatt anwendest.


Häufige Fehler und Lösungen

  • Fehler 6 - Überlauf: Dieser Fehler tritt auf, wenn Du versuchst, einen Wert in einer Integer-Variablen zu speichern, der größer als 32.767 ist. Verwende Long, um sicherzustellen, dass Du einen größeren Zahlenbereich abdeckst.

  • Falsches Arbeitsblatt: Wenn Du auf ActiveSheet zugreifst, stelle sicher, dass das richtige Blatt aktiv ist:

    NoOfRows = ActiveSheet.Cells(Rows.Count, 3).End(xlUp).Row
  • Unerwartete Werte: Wenn NoOfRows 65536 anzeigt, überprüfe, ob in den Zellen der Spalte 3 Daten vorhanden sind oder ob die Zellen fälschlicherweise leer erscheinen.


Alternative Methoden

Du kannst auch andere Methoden verwenden, um die letzte befüllte Zeile zu ermitteln. Hier ist eine alternative Möglichkeit, die sicherstellt, dass Du den Wert nur dann übernimmst, wenn die Zelle leer ist:

With WKS.Cells(WKS.Rows.Count, 3)
    If .Formula = "" Then
        NoOfRows = .End(xlUp).Row
    Else
        NoOfRows = .Row
    End If
End With

Praktische Beispiele

Hier ist ein praktisches Beispiel, wie Du die letzte Zeile in verschiedenen Spalten ermitteln kannst:

Dim NoOfRowsCol1 As Long
Dim NoOfRowsCol2 As Long

NoOfRowsCol1 = WKS.Cells(WKS.Rows.Count, 1).End(xlUp).Row
NoOfRowsCol2 = WKS.Cells(WKS.Rows.Count, 2).End(xlUp).Row

Tipps für Profis

  • Optimierung: Wenn Du häufig mit großen Datenmengen arbeitest, achte darauf, Deine Makros zu optimieren, indem Du unnötige Berechnungen vermeidest.

  • Verwendung von .End(xlDown): Wenn Du von der letzten Zeile nach oben gehst, kann .End(xlDown) auch nützlich sein, um die nächste gefüllte Zelle nach unten zu finden.

  • Vermeidung von Magic Numbers: Verwende keine festen Zeilen- oder Spaltenzahlen, sondern dynamisiere Deinen Code, indem Du die Cells-Methode verwendest.


FAQ: Häufige Fragen

1. Warum funktioniert der Code in Office 2003, aber nicht in Office 2007?
In Office 2007 gibt es mehr Zeilen in einem Arbeitsblatt. Wenn Du alte Dateien bearbeitest, solltest Du sicherstellen, dass Du die letzte Zeilennummer auf dem richtigen Blatt ermittelst.

2. Was bedeutet Cells(Rows.Count, 3).End(xlUp).Row?
Diese Methode ermittelt die letzte gefüllte Zelle in der dritten Spalte, indem sie von der letzten Zeile nach oben geht, bis sie eine nicht-leere Zelle findet.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige