AW: Laufzeitfehler 1004 - Wo ist der Unterschied
22.11.2008 15:00:00
Daniel
Hi
der grund ist folgender:
die Vollständige Referenzierung für eine Zelle ist immer:
APPLICATION(Excel).WORKBOOKS("Mappe1.xls").SHEETS("Tabelle1").RANGE("A1")
bzw
APPLICATION(Excel).WORKBOOKS("Mappe1.xls").SHEETS("Tabelle1").CELLS(1,1)
wird jetzt in dieser Kette was wegelassen, so ergänzt Exel automatisch immer die Werte des gerade Aktiven Tabellenblatts.*
Wenn jetzt allerdings z.B. Sheet2 aktiv ist, dann bezieht sich in der Zeile:
Sheets("Sheet1").Range(Cells(1, 1), Cells(1, 10)).Copy
die Range auf Sheet1, die Cells, mit denen die Range definiert werden soll aber auf Sheet2, weil dieses aktiv ist, und damit ist es nicht mehr eindeutig und es kommt zum Fehler.
um das Problem zu umgehen, müsste man die Zeile so formulieren:
Sheets("Sheet1").Range(Sheets("Sheet1").Cells(1, 1), Sheets("Sheet1").Cells(1, 10)).Copy
allerdings darf man jetzt die Sheetangabe vor dem RANGE weglassen:
Range(Sheets("Sheet1").Cells(1, 1), Sheets("Sheet1").Cells(1, 10)).Copy
oder man arbeitet zur weiteren vereinfachung mit der WITH-Klammer:
With Sheets("Sheet1")
Range(.Cells(1, 1), .Cells(1, 10)).Copy
End With
oder man vergrössert den Zellbereich mit der Resize-Funktion:
Sheets("Sheet1").Cells(1, 1).Resize(10,1).Copy
Gruß, Daniel
*dies gilt, wenn der Code in einem allgemeinen Modul steht.
Steht der Code im Modul eines Tabellenblatts, so werden die Daten dieses Tabellenblatts ergänzt.