Letzte beschriebene Zeile Makro

Hallo zusammen,

bin gerade am Makro basteln und habe da ein Problem.
Ich möchte die letzte beschriebene Zeile haben um danach etwas einzufügen.
Folgenden Code wollte ich eigentlich benutzen:

letzteZeile = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

Nun gibt er mir aber die letzte Zeile des kompletten Arbeitsblattes (Daten sind aus SAP importiert). Anscheinend sind hier alle Zellen „benutzt“.
Gibs da die Möglichkeit die letzte Zeile zu zählen, wo wirklich was drinne steht (also eine Zahl oder ein String oder sowas)?

Danke schonmal!

MfG

letzteZeile =
ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

Arg, nächste Google-Suche gab natürlich einen Treffer:

letzteZeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

Kann mir wer den Unterschied der beiden erklären?

Danke!

Hallo Brille,

letzteZeile =
ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

Wieso der UsedRange bei dir nicht richtig funktioniert, weiß ich nicht. Dazu müsste man deine Mappe sehen.

Arg, nächste Google-Suche gab natürlich einen Treffer:

letzteZeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

Das funktioniert nur, wenn die letzte beschriebene Zeile auch in Spalte A einen Eintrag hat: Rows.Count gibt dir die höchste mögliche Zeilennummer (ist ja bei den verschiedenen Excel-Versionen unterschiedlich).
Cells(Rows.Count, 1 ) gibt dir also die letzte mögliche Zelle in Spalte A
Mit End(xlUp) kommst du von dort in die letzte gefüllte Zelle in Spalte A. Wirkt wie Strg mit Pfeiltaste nach oben.
Und Row gibt dir dann die Zeilennummer dieser Zelle.
Wie gesagt: Vorsicht, wenn in anderen Spalten noch weiter unten Zellen gefüllt sind. Die werden nicht gefunden.

Danke!

Gruß, Andreas

Hallo Andreas,

danke für die Erklärung.

letzteZeile =
ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

Wieso der UsedRange bei dir nicht richtig funktioniert, weiß
ich nicht.

Habs eben nochmal ausprobiert und es kommt wieder 65536 raus (habe extra alle Zeilen unter der letzten markiert und gelöscht).

Aber:
Nun bin ich ganz verwirrt. Eigentlich war das eine 97-Datei die ich mit 2010 geöffnet habe. Nun habe ich das mal als .xlsm gespeichert. Das eine Blatt hat trotzdem nur 65536 Zeilen. Die anderen Blätter (in denen auch schon was stand) haben aber die 1,4 Mio. Zeilen…wie funktioniert sowas denn?

Wie gesagt: Vorsicht, wenn in anderen Spalten noch weiter
unten Zellen gefüllt sind. Die werden nicht gefunden.

Ist bei der Tabelle zum Glück egal, wenn da nix mehr drin steht brauch ich den Rest auch nicht.

MfG

Hallo Andreas,

Hi Brille,

Aber:
Nun bin ich ganz verwirrt. Eigentlich war das eine 97-Datei
die ich mit 2010 geöffnet habe. Nun habe ich das mal als .xlsm
gespeichert. Das eine Blatt hat trotzdem nur 65536 Zeilen. Die
anderen Blätter (in denen auch schon was stand) haben aber die
1,4 Mio. Zeilen…wie funktioniert sowas denn?

Hab gerade auch mal sowas versucht:
Eine .xls-Datei erstellt mit Excel2003 und in A65536 was geschrieben. Dann gespeichert.
Die Datei mit Excel2010 wieder auf gemacht. In der Titelzeile heißt es dann …Kompatibilitätsmodus.
Dann die Datei mit „Speichern unter“ als .xlsx gespeichert. An dem Kompatibilitäts-Modus ändernt sich erst mal nichts. Es bleiben auch 65536 Zeilen.
Dann Datei schließen und wieder öffnen. Kompatibilitätsmodus weg und 1.4 Mio Zeilen.
Diese Effekte treten bei mir allerdings immer in allen Blättern auf.
Wie du das schaffst, es nur in einem Blatt zu machen - keine Ahnung. Sorry.
Echte Experten vor!

MfG

Gruß, Andreas

Hallo Brille,

letzteZeile = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

Nun gibt er mir aber die letzte Zeile des kompletten
Arbeitsblattes (Daten sind aus SAP importiert). Anscheinend
sind hier alle Zellen „benutzt“.

ja, ein Benutzer oder SAP hat da eine Zelle benutzt. Da muß jetzt gar nix mehr
drin/dran sein in der Zelle, die einmalige Benutzung erweitert UsedRange bis auf
diese Zelle.

Kannste nachstellen mit z.B.
Range(„A30000“).interior.colorindex=3
Range(„A30000“).interior.colorindex=Range(„A1“).interior.colorindex
msgbox activesheet.usedrange.address

Ist das in deiner Mappe geschehen so kann man ggfs. nachträglich gar nicht
ermitteln wodran es liegt denn man findet ja keine Spuren mehr.

Manuell ist ein Weg, wenn du die Daten anschaust und offensichtlich ist
Zeile 2000 die letzte benutzte Zeile dann markierst du Zeile 2001 bis ganz nach
unten und wählst „Zeilen löschen“.

letzteZeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

Bei Bedarf könntest du das so umstricken:
For N = 1 to columns.count
letzteZeile = application.max(letztezeile;ActiveSheet.Cells(Rows.Count,
N).End(xlUp).Row)
next n

Gruß
Reinhard