AW: Erklärung für VBA-Zeile
18.07.2016 17:31:06
Michael
Hi Nik,
ich bin wahrscheinlich nicht der "richtige" Michael (außerdem ist der EINZIGE admin Herr Herber, wir sind alle nur Helfer), macht aber nix.
Liste ist offensichtlich oben als range gedimt. Ein Range ist ein OBJEKT, und Objekte weist man nicht einfach mit =, sondern mit Set zu (im Gegensatz zu "einfachen Variablen").
P ist offensichtlich auch ein Range-Objekt, und in der Schleife werden alle einzelnen Zellen von C6 nach rechts (solange Daten vorhanden sind) durchlaufen.
In Zeile 6 stehen anscheinend Überschriften, die in der Liste NICHT vorhanden sein sollen. Dafür sorgt das .Offset. Also wird (gedanklich) z.B. aus C6 dann C7 (offset(zeile,spalte) versetzt also 1 Zeile nach unten und bleibt wegen 0 in der gleichen Spalte).
Das (.Cells(.Rows.Count, 2).End(xlUp).Row ermittelt die Zeile mit dem untersten Wert, allerdings ist der Code hier suboptimal, denn er geht IMMER von .Cells(xxx,2), also der Spalte B, aus:
a) wenn das so erwünscht ist, macht man diesen Teil direkt VOR der Schleife, denn dann muß der Wert nur einmal ermittelt werden, und man kann ihn in eine Variable stecken:
'oben:
Dim maxB as long
' max. Zeile in Spalte B
' VOR der Schleife einmal die Zuweisung:
maxB=.Cells(.Rows.Count, 2).End(xlUp).Row
'und unten dann verkürzt:
Set Liste = P.Offset(1, 0).Resize(maxB - 6, 1)
oder
b) man ersetzt die 2 nach dem rows.count durch die jeweilige Spaltennummer... Ich persönlich notiere lieber extra Variablen als derart lange "Rattenschwänze", das finde ich übersichtlicher.
Das wäre dann analog:
'oben:
Dim maxSpalte as long
' VOR dem Set Liste die Spalte ermitteln:
maxSpalte = .Cells(.Rows.Count, P.column).End(xlUp).Row
'und unten dann verkürzt:
Set Liste = P.Offset(1, 0).Resize(maxSpalte - 6, 1)
Das -6 sorgt in beiden Fällen dafür, daß die untersten 6 Zeilen NICHT in die "Liste" übernommen werden.
Du kannst so was gut schrittweise nachverfolgen, indem Du nach dem Set Liste... zwei Zeilen einfügst:
Liste.interior.color=vbyellow ' färbt den Bereich gelb
msgbox "weiter"
Allerdings siehst Du die Färbung nur dann, wenn Du kein application.screenupdating=false verwendest.
Schöne Grüße,
Michael