Excel VBA und letzte benutzte Zeile trotz Autofilter

gehtnetgibtsnet

Cadet 4th Year
Registriert
März 2019
Beiträge
124
Hallo Forum,

ich habe eine Tabelle, welche aus einem "Vorspann" von mehreren Zeilen besteht. Danach folgt ein Bereich, auf den ein Autofilter gesetzt ist. In beiden Bereichen sind Leerzeilen möglich.

Ich suche nun eine Möglichkeit, die "wirklich" letzte benutzte Zeile zu ermitteln.

Zu diesem Zweck habe ich mir eine kleine Tabelle aufgebaut. Per Makro nutze ich jetzt jede der mir bekannten Möglichkeiten, und zeige die von dieser Möglichkeit ermittelte Zahl und deren "Namen" in der Tabelle an.

Probleme macht vor allem ein aktiver Autofilter. Dann erhalte ich nur die durch den Autofilter ermittelte letzte Zeile.

Die richtige Zahl wird mir mit "ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row" angezeigt, wenn ich nach dem AuUtofilter-Bereich noch in einer weiteren Zeile und beliebigen Spalte etwas einfüge!

Ich brauche die genaue Zahl, weil ich ggf. weitere Zeilen für den Autofilterbereich einfügen möchte, oder nach dem Filterbereich noch Zusatzinformationen bereitstellen möchte.

Mit einem "Klick" auf "neu berechnen" wird der Makro "berechnen" erneut ausgeführt. Der aktuelle Autofiter-Bereich ist gelb hinterlegt.

Meine Test-Tabelle ist beigefügt; als XLS-Files: das Forum läßt keine XLSM-Files zu. Aktuell werden in Spalte "C" und "D" Leerzeilen ausgefiltert.


Wer kann mir weiterhelfen?

Gruß
gngn
 

Anhänge

Hallo Cave Johnson,

ein Blick in meine Mustermappe hätte Dir gezeigt, dass ich diese Variante (allerdings für Spalte "B") bereits im Einsatz habe. Spalte A habe ich leer und mit einer Breite von "2" definiert, damit meine "sinnvollen" Daten nicht gerade an der vorderen Senkrechten kleben.

Gruß

gngn
 
Hallo Scientist und "Danke" für Deine Antwort.

Habe Deinen Vorschlag in meine Tabelle eingebaut und erhalte tatsächlich den erwarteten Wert.

Komisch ist nur, dass ich diese Variante mehrfach in meinen Tabellen im Einsatz habe. Warum ich in machen Fällen eine andere Variante gewählt habe, kann ich derzeit nicht mehr feststellen.

Lassen wir es vorerst dabei, dass Dein Vorschlag in Verbindung mit meiner Mustermappe die richtige Lösung ist.

Gruß

gngn
 
Der Befehl zählt die Zeilen im "benutzten Bereich".

Wenn du diesen "sichtbar" machen moechtest, kannst du ja mal Testweise ActiveSheet.UsedRange.Rows.select ausfuehren.

Wenn der Bereich nun mittendrin anfängt, musst du noch die Zeilen darueber addieren.
In deinem Fall ist das nicht notwendig, weil du mit Zeile 1 anfängst.

Alternativ: ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row

"xlUp" funktioniert nur mit sichtbaren Zellen.
"xlCellTypeLastCell" wird erst beim Speichern, Schließen oder Oeffnen aktualisert und dabei muss es sich auch nicht um die "letzte Zelle mit Inhalt" handeln. Ehemalige oder nur formatierte Zellen reichen auch schon.
Ich denke aber auch, dass die Funktion nur mit sichtbaren Zellen funktioniert.

Soße: Link
 
Hallo Scientist und "Danke" für Deine Erläuterungen.

Leider bin ich erst heute dazu gekommen, meine Anwendung auf "ActiveSheet.UsedRange.Rows.Count" umzustellen. Doch ich hatte nicht den Wert erzielt, den ich erwartet hätte. Und ich habe auch sofort den Grund dafür gefunden: Zu Beginn meiner Tabelle gibt es - warum auch immer - mehrere Leerzeilen. Und die Anzahl dieser Leerzeilen ergibt genau den Unterschied zwischen ermitteltem und erwartetem Wert. Obwohl vor den Filter-Zeilen noch weitere Leerzeilen auftauchen, spielen diese bei der Berechnung keine Rolle.

Testweise habe ich in Zeile 1 einen Text geschrieben, und mein Problem war gelöst. Aber ich möchte nicht unbedingt mein Layout ändern. Deshalb habe ich jetzt die Frage: wie kann ich führende Leerzeilen ermitteln, also von Zeile 1 bis vor die erste nicht-leere Zeile.

Gruß

gngn
 
Hallo Scientist , doch, das habe ich gelesen.

Ich suche aber nach einer generellen Lösung. Und dabei muss ich auch unterstellen (wie das in meinem aktuellen Projekt der Fall ist), dass zu Beginn der Tabelle Leerzeilen vorhanden sind. Deshalb war meine Frage, wie ich "elegant" die Anzahl der Zeilen bis zur ersten nicht-leeren Zeile ermitteln kann. Dann gibt die ermittelte Zahl und der Wert aus ActiveSheet.UsedRange.Rows.Count die Zeilen-Nummer der letzten verwendeten Zeile. Davon gehe ich aus.

Gruß

gngn
 
Scientist schrieb:
Alternativ: ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row
Man haette sich auch die Quelle ansehen koennen, wenn mein Geschreibe zu wenig aufschlussreich ist ...

PS: Deine Markierungen im Fließtext bezwecken genau das Gegenteil. Spar dir also die Zeit, da freut sich auch der Lesefluss.
 
Zurück
Oben