AW: Grösse von Code in Modul erreicht
08.01.2009 11:55:00
Code
Hi
um Zeichen zu sparen kanns du mit der WITH-Klammer arbeiten,
ebenso ist es nicht notwendig, "Destination" hinzuschreiben, wenn ein Befehl Parameter verlangt, müssen diese nur dann expizit angeben werden, wenn sie nicht in der vorgesehenen Reihenfolge angegeben werden.
außderdem reicht es, wenn man beim kopieren von Daten nur die erste Zelle angibt.
das ganze sieht dann so aus:
With Sheets("DatenUForm")
'A
Sheets("A").Range("A9:A14").Copy .Range("H2")
Sheets("A").Range("A17:A22").Copy .Range("H8")
Sheets("A").Range("A26:A34").Copy .Range("H14")
End with
das sollte schon mal eine ausreichende verkleinerung der Daten bringen.
noch weiter verkürzen könnt man das ganze über Schleifen, dazu müssten aber die zu koperenden Zellbereiche auf jedem Blatt gleich sein, das könnte dann etwa so aussehen:
dim i as long
dim Bereich(9) as string
Bereich(1) = "A9:A14"
Bereich(2) = "A17:A22"
Bereich(9) = "A85:A89"
With Sheets("DatenUForm")
'A
For i = 1 to 9
Sheets("A").Range(Bereich(i)).Copy .Cells(rows.count, "H").end(xlup).offset(1,0)
next
'B
For i = 1 to 3
Sheets("B").Range(Bereich(i)).Copy .Cells(rows.count, "H").end(xlup).offset(1,0)
next
'C
For i = 1 to 4
Sheets("C").Range(Bereich(i)).Copy .Cells(rows.count, "H").end(xlup).offset(1,0)
next
End with
wenn man auch noch die Blätter in Indexvariablen ablegt und die anzahl der Durchläufe Pro Blatt, lässt sich das ganze nochmal verkürzen:
dim i as long, x as long
dim sh(3) as Worksheet
dim Anz(3) as long
dim Bereich(9) as string
Bereich(1) = "A9:A14"
Bereich(2) = "A17:A22"
Bereich(9) = "A85:A89"
set sh(1) = Sheets("A")
Set sh(2) = Sheets("B")
Set sh(3) = Sheets("C")
Anz(1) = 9
Anz(2) = 3
Anz(3) = 4
For x = 1 to 3
for i = 1 to Anz(x)
sh(x).Range(Bereich(i)).Copy Sheets("DatenUForm").cells(rows.count, "H").end(xlup).offset(1, _
0)
next i
next x
und dann wirds richtig kurz.
aber das funktioniert nur, wenn alle Blätter gleich strukuriert sind.
Gruß, Daniel