Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1252to1256
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
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

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

318 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige