Der gefilterte Bereich wird/kann in sog. Areas unterteilt sein.
Wenn das Filtrat komplett zusammenliegt. Gibt es nur ein Area. Wenn der Bereich nicht zusammenliegt gibt es meherer Areas.
Aufschluss darüber, gibt die Areas.Count-Eigenschaft.
a) Areas.Count ist gleich 1, wenn das Filtrat komplett zusammenliegt
b) Areas.Count ist > 1, wenn das Filtrat nicht zusammenliegt
c) Laufzeitfehler #91, wenn es kein Area bzw kein Filtrat gibt bzw Intersect() kein Rückgabewert liefert (=Nothing)
Beispiel zu a) und b):
Dim rng As Excel.Range
Set rng = Range("A1").CurrentRegion
MsgBox Intersect(rng, rng.SpecialCells(xlCellTypeVisible), rng.Offset(1, 0)).Areas.Count
zu c) später mehr
Jedes Area, Deines Filtrats, beherbergt Zeilen.
Du baust also eine Schleife, um alle Areas abzuklappern.
Entweder eine For-Next-Schleife (1 To.Areas.Count)
Oder eine For-Each-Schleife
Da Du nur 10 Zeilen haben willst, ist es möglich, dass Du nicht bis zu Areas.Count gehen musst, sondern zuvor die Schleife verlassen kannst.
Nämlich dann, wenn Du 10Zeilen gezählt hast.
Beispiel für die Schleife:
Dim rng As Excel.Range
Dim vArea As Variant
Set rng = Range("A1").CurrentRegion
For Each vArea In Intersect(rng, rng.SpecialCells(xlCellTypeVisible), rng.Offset(1, 0)).Areas
MsgBox vArea.Address & vbTab & "hat " & vArea.Rows.Count & " Zeile(n)"
Next
Fragen dazu?
|