Standardfehler
14.03.2016 13:56:44
Daniel
Hi
du machst mal wieder den Standardfehler, den wohl jeder mal macht, der aber bei VBA-Gut eigentlich nicht mehr vorkommen sollte.
Es gilt:
Zellbezüge (Range, Cells, Columns, Rows) ohne Tabellenblattangabe davor beziehen sich immmer auf das aktive Tabellenblatt (oder wenn der Code in einem Tabellenblattmodul steht, auf das Modulblatt).
Das gilt auch, wenn die Zellbezüge innerhalb von Funktionen stehen wie bei Range(Cells(), Cells())
dh hier muss die Worksbook- und Worksheet-Angabe auch vor den beiden Cells stehen und nicht nur vor der Range. Ansonsten hast du das Problem, dass die Cells auf einem anderen Blatt liegen als die Range, die sie definieren sollen und das führt dann zum Fehler.
Weil der Code so schnell sehr unübersichtlich wird, sollte man auf Range(Cells(), Cells()) verzichten wenn auf ein anderes Workbook zugegriffen wird.
Übersichlicheren Code ergibt die WITH-Klammer:
WITH wkbQuellMappe.Sheets(strQuellSheet)
.Range(.Cells(7, 1), .Cells(22, 1)).Copy
end With
oder wenn WITH schon anderweitig verwendet wird, kann man den Zellbereich mit Resize angeben:
wkbQuellMappe.Sheets(strQuellSheet).Cells(7, 1).Resize(16, 1).Copy
bzw in der Schleifenversion
wkbQuellMappe.Sheets(strQuellSheet).Cells(7, lngLaufSpalteLog).Resize(lngMaxZeileLog - 7 + 1, 1).copy
Gruß Daniel