Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Range mit letzter Zeile (mit Inhalt)

Range mit letzter Zeile (mit Inhalt)
HaWe
Hallo alle VBA-Experten,
wieder habe ich ein VBA-Problem:
Zur Darstellung aller (nicht) ausgeblendeten Zeilen in einem UserForm wird die Anzahl belegter Zeilen ermittelt. Das folgende VBA-Prog. liefert aber noch die alte Anzahl an Zeilen (viele wurden inzwischen wieder gelöscht), nicht die aktuelle Anzahl. Versuche, "UsedRange()" zu ersetzen habe ich leider nicht hinbekommen. Eine MsgBox liefert mir zwar mit
MsgBox Cells.Find("*", searchdirection:=xlPrevious).Row
die (richtige) letzte benutzte Zeile. Wie benutze ich aber diese Angabe/Formel in diesem VBA zur Anzeige aller ausgeblendeten Zeilen:
Private Sub UserForm_Initialize()
Dim x$, C&
Dim rng As Range
Set rng = ActiveWorkbook.ActiveSheet.UsedRange()
For C = 1 To rng.Rows.Count
x$ = C
Me.lstRows.AddItem x$
If Not rng.Rows(C).Hidden Then
Me.lstRows.Selected(C - 1) = True
End If
Next C
End Sub

Dies ist nur ein Ausschnitt, andere SUB´s sind für die Definition der Userform, hier ist nur die Zeile "Set rng = ActiveWorkbook.ActiveSheet.UsedRange()" von Bedeutung, die hier den jemals benutzten Bereich ermittelt und nicht den aktuell benutzten.
Habt Ihr eine Lösung für dieses triviale Problem?
Danke schon mal
Hans-Werner
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Letzte Zeile
19.03.2012 01:36:17
Erich
Hi Hans-Werner,
probier mal

Option Explicit
Private Sub UserForm_Initialize()
Dim lngZ As Long
With Me.lstRows
For lngZ = 1 To LZWeTab()
.AddItem lngZ
If Not ActiveSheet.Rows(lngZ).Hidden Then .Selected(lngZ - 1) = True
Next lngZ
End With
End Sub
Function LZWeTab() As Long             ' letzte Zeile mit Wert > "" in Tabelle
Dim rngF As Range
With ActiveSheet
Set rngF = .Cells.Find("*", .Cells(1), xlValues, , xlByRows, xlPrevious)
End With
If rngF Is Nothing Then LZWeTab = 1 Else LZWeTab = rngF.Row
End Function
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
Anzeige
AW: Letzte Zeile
19.03.2012 15:55:58
HaWe
Hallo Erich,
danke für die Super-Lösung, funktioniert einwandfrei.
Auf zwei interessante Dinge bin ich beim Programmieren zwischenzeitlich gestoßen:
1. Wenn man vom Ende her die letzte(n) Zeile(n) ausschaltet, erscheinen diese (natürlich) bei einem
erneuten Aufruf der Funktion nicht mehr in der Liste, da sie ja ausgeblendet sind und daher nicht mehr
als letzte Zeilen erkannt werden können.
2. Bei einer großen Tabelle flackert das Bild (Bildschirm). Dies kann vermieden werden durch

Application.ScreenUpdating = False

bevor eine Änderung der Zeilendarstellung durchgeführt wird (am Anfang der jeweiligen Funktion
eintragen). Bevor die Funktion beendet wird

Application.ScreenUpdating = True

eintragen um das Aktualisieren der Bildschirmdarstellung wieder einzuschalten.
Dieser zweite Punkt bewirkt eine extreme Beschleunigung beim Durchlauf der Funktionen (ohne
Application.ScreenUpdating=False dauert das Durchlaufen von ca. 1500 Zeilen etwa 3-5 Minuten
(=Kaffeepause), mit Application.ScreenUpdating=False sind es nur Millisekunden). Wenn also
Application.ScreenUpdating=False eingestellt wird, kann die Suche der letzten Zeile auf die einfache
Tour mit
Set rng = ActiveWorkbook.ActiveSheet.UsedRange()

durchgeführt werden, da das Durchsuchen von über 1000 Zeilen nicht mehr Minuten, sondern
nur noch Millisekunden dauert.
Gruß
Hans-Werner
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Ermitteln der letzten Zeile mit Inhalt in Excel VBA


Schritt-für-Schritt-Anleitung

Um die letzte Zeile mit Inhalt in Excel VBA zu ermitteln, kannst Du die folgende Schritt-für-Schritt-Anleitung nutzen. Diese Methode ist besonders hilfreich, wenn Du in einer UserForm alle nicht ausgeblendeten Zeilen anzeigen möchtest.

  1. Öffne den VBA-Editor in Excel (ALT + F11).
  2. Erstelle ein neues Modul oder öffne ein vorhandenes.
  3. Füge den folgenden Code in das Modul ein:
Option Explicit
Private Sub UserForm_Initialize()
    Dim lngZ As Long
    With Me.lstRows
        For lngZ = 1 To LZWeTab()
            .AddItem lngZ
            If Not ActiveSheet.Rows(lngZ).Hidden Then .Selected(lngZ - 1) = True
        Next lngZ
    End With
End Sub

Function LZWeTab() As Long ' letzte Zeile mit Wert > "" in Tabelle
    Dim rngF As Range
    With ActiveSheet
        Set rngF = .Cells.Find("*", .Cells(1), xlValues, , xlByRows, xlPrevious)
    End With
    If rngF Is Nothing Then LZWeTab = 1 Else LZWeTab = rngF.Row
End Function
  1. Schließe den VBA-Editor und teste Deine UserForm. Du solltest nun alle Zeilen mit Inhalten sehen, die nicht ausgeblendet sind.

Häufige Fehler und Lösungen

  • Problem: Die UserForm zeigt nicht die aktuellen Zeilen an, obwohl Du sie gelöscht hast.
    Lösung: Stelle sicher, dass Du die Funktion LZWeTab() korrekt implementiert hast. Diese Funktion ermittelt die letzte Zeile mit Inhalt und aktualisiert die Darstellung in der UserForm.

  • Problem: Der Bildschirm flackert während der Ausführung.
    Lösung: Füge die folgenden Zeilen zu Deinem Code hinzu, um das Flackern zu vermeiden und die Ausführungsgeschwindigkeit zu erhöhen:

Application.ScreenUpdating = False
' Deine Code-Logik hier
Application.ScreenUpdating = True

Alternative Methoden

Eine alternative Methode zur Ermittlung der letzten Zeile mit Inhalt ist die Verwendung der UsedRange-Eigenschaft. Diese Methode kann jedoch weniger zuverlässig sein, wenn Du Zeilen gelöscht hast, da sie den gesamten benutzten Bereich zurückgibt. Hier ist ein einfaches Beispiel:

Dim rng As Range
Set rng = ActiveWorkbook.ActiveSheet.UsedRange
MsgBox rng.Rows.Count

Das obige Beispiel zeigt die Anzahl der verwendeten Zeilen an, könnte aber veraltete Informationen liefern, wenn Zeilen gelöscht wurden.


Praktische Beispiele

Hier ist ein weiteres Beispiel für die Ermittlung der letzten Zeile mit Inhalt:

Sub LetzteZeileMitInhalt()
    Dim letzteZeile As Long
    letzteZeile = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    MsgBox "Die letzte Zeile mit Inhalt ist: " & letzteZeile
End Sub

In diesem Beispiel wird die letzte Zeile mit Inhalt ermittelt und in einer MessageBox angezeigt.


Tipps für Profis

  • Verwende immer Option Explicit am Anfang Deines Moduls, um sicherzustellen, dass alle Variablen deklariert sind. Das hilft, Fehler im Code zu vermeiden.
  • Teste Deine UserForm regelmäßig, um sicherzustellen, dass alle Funktionen wie gewünscht arbeiten.
  • Bei großen Datenmengen kann die Verwendung von Application.ScreenUpdating = False die Leistung erheblich verbessern.

FAQ: Häufige Fragen

1. Wie kann ich die letzte Zeile mit Inhalt ermitteln, wenn einige Zeilen ausgeblendet sind?
Du kannst die bereits beschriebenen Methoden verwenden, um die letzte Zeile zu finden, ohne die ausgeblendeten Zeilen zu berücksichtigen. Die Funktion LZWeTab() ist dafür besonders geeignet.

2. Funktioniert diese Methode in allen Excel-Versionen?
Ja, die beschriebenen Methoden zur Ermittlung der letzten Zeile mit Inhalt funktionieren in den meisten Excel-Versionen, die VBA unterstützen.

3. Was kann ich tun, wenn die Ergebnisse nicht wie erwartet sind?
Überprüfe den Code sorgfältig auf mögliche Tippfehler oder logische Fehler. Teste die Funktion in einem neuen Arbeitsblatt, um sicherzustellen, dass keine unerwarteten Daten vorhanden sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige