Altbekannter Fehler, welcher bei Anfängern oft auftritt. ;)
Das Problem ist, dass der Code, je nach dem an welcher Stelle er im Projekt steht, mitunter funktionieren oder nicht funktionieren wird. Das liegt ganz einfach an folgendem Verhalten.
1 | Range(Cells(x, 3), Cells(x + 10, 3))
|
Steht diese Zeile innerhalb einer Tabelle, dann bezieht sich sowohl Range als auch Cells auf diese eine Tabelle.
Steht diese Zeile innerhalb eines Moduls, dann bezieht sich sowohl Range als auch Cells auf die aktive Tabelle.
Schreibt man jetzt ...
1 | ActiveSheet.Range(Cells(x, 3), Cells(x + 10, 3))
|
... und legt diesen Code in einer Tabelle ab, dann knirscht es immer dann, wenn die aktive Tabelle nicht die Tabelle ist, in der dieser Codeschnipsel befindet.
Konkreter: Die obige Codezeile liegt in "Tabelle1" (hierauf bezieht sich also Cells()) und die aktive Tabelle ist "Tabelle2".
Es wird hier also nun versucht einen zusammenhängenden Bereich über zwei Tabellen hinweg zu refrenzieren und das ist natürlich nicht möglich - Tabellenblätter und ihr Bereiche sind nun mal getrennt voneinander.
Und das bringt uns auch schon auf eine der wichtigsten Grundregeln beim programmieren:
Schreib immer das was du auch meinst vollständig (!!) aus (bzw. nutze Variablen).
Also:
1 2 3 | With ActiveSheet
.Range(.Cells(x, 3), .Cells(x + 10, 3)).Copy
End With
|
(beachte die Punkte vor Range() und Cells())
PS: Du scheinst den Code 1:1 vom Makrorekorder übernommen zu haben? Ein Tipp: Der Makrorekorder gibt nur einen ungefähren Ansatz zur Problemlösung. Was er ausspuckt ist immer zu überarbeiten (ganz konkret sind damit Zeilen mit Select / Activate und Selection gemeint).
Gruß
|