Anzeige
Archiv - Navigation
1504to1508
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
Inhaltsverzeichnis

Erklärung für VBA-Zeile

Erklärung für VBA-Zeile
18.07.2016 16:21:03
Nik
Hallo zusammen,
Michael (ein Admin aus diesem Forum) hat mir vor ca. 2 Wochen geholfen bei einem Code, welcher auch sehr gut funktioniert. Ich bin grad an ein paar Anpassungen (als auch für mich lernen was hier im Code passiert), die ich vornehmen möchte, scheiter aber daran die letzte Zeile dieses Blockes (fett markiert) zu verstehen:
With WsQ
For Each P In .Range(.Range("C6"), .Range("C6").End(xlToRight))
Set WbZ = Workbooks.Add
Set Liste = P.Offset(1, 0).Resize(.Cells(.Rows.Count, 2).End(xlUp).Row - 6, 1)
Kann mir hier jemand kurz auf die Sprünge helfen, was diese Zeile überhaupt macht?
Vielen lieben Dank und Gruss
Nik

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Diese setzt die ObjektVariable 'Liste' auf ...
18.07.2016 17:23:31
Luc:-?
…die ZellReferenz der in Zeile 6 von Spalte C bis zur letztbenutzten Spalte gerade angesprochenen Zelle P auf die darunterunterliegende Zelle, Nik,
wobei diese Referenz auf den ganzen ZellBereich der 2.Spalte lt For Each-Kopf-Bezug bis zur letztbenutzten Zeile ausgedehnt und dann auf die unter P liegende Zelle bezogen wird. Also wird so mit Liste ein Bereich von Zeile(P)+1 bis Zeile(Pn)-6 in der Spalte von P referenziert.
Übrigens gibt's hier nur einen Admin (HWH) und einen mit Mod-Rechten und letzterer heißt nicht Michael, sondern Max… ;-)
Gruß, Luc :-?
Besser informiert mit …
Anzeige
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
Anzeige
AW: Erklärung für VBA-Zeile
19.07.2016 07:26:37
Nik
Einen schönen guten Morgen zusmmen...
woow, herzlichen Dank für die Erklärungen! Einmal mehr merke ich das es noch viel zu lernen gibt! Das mit dem farbig markieren ist eine tolle Idee, die werde ich mit Sicherheit ausprobieren um schneller zu verstehen was wann gemacht wird im Code!
Vielen lieben Dank für Eure Hilfe und guten Start in den Dienstag!
Gruss
Nik
gern geschehen,
19.07.2016 13:50:15
Michael
Hi zusammen,
happy exceling & schöne Grüße,
Michael

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige