Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Fehler bei Copy-Methode

Fehler bei Copy-Methode
Ines
Hallo,
ich habe ein Makro, das ein Kollege von mir geschrieben hat, der aber schon seit Jahren nicht mehr im Unternehmen ist. Dieses Makro läuft in Excel XP super durch. In Excel 2010 läuft es aber immer an derselben Stelle auf einen Fehler.
Es kommt die Meldung "Laufzeitfehler '1004': Die Copy-Methode des Range-Objektes konnte nicht ausgeführt werden." Wenn ich dann auf "Debuggen" klicke, werden die beiden letzten Zeilen aus dem folgenden Makro-Auszug markiert.
...
Worksheets("PL KG").Activate
Cells.Select
Selection.ClearContents
Range("A1").Select
Worksheets("Formatierung_1").Range(Sheets("Formatierung_1").UsedRange.Address).Copy _
Destination:=Worksheets("PL KG").Range("A" & Cells(Rows.Count, 1).End(xlUp).Row)
Worksheets("Formatierung_2").Range(Sheets("Formatierung_2").UsedRange.Address).Copy _
Destination:=Worksheets("PL KG").Range("A" & Cells(Rows.Count, 1).End(xlUp).Row + 1)

...
Bei meinen diversen Versuchen das Makro ans Laufen zu kriegen habe ich festgestellt, dass es funktioniert sobald ich als Ziel im Sheet "PL KG" die Zelle A1 mit Range oder Cells angebe. Das hilft mir aber leider nicht, da ja der Inhalt von zwei Tabellen zusammen in eine Tabelle soll.
Dazu passt auch, dass ich die beiden untersten Befehle umdrehen kann. Es wird immer der obere Befehl ausgeführt, der nächste Befehl bringt dann die Fehlermeldung.
Ich habe auch das "...Row +1)" mal durch "... Offset (1,0)" ersetzt, hat aber leider keine Veränderung gebracht.
Erfolglos war auch der Versuch die Befehle auseinander zu nehmen, also erst das Sheet aktivieren, dann die Zellen markieren und kopieren, Sheet "PL KG" aktivieren, unterste Zeile bestimmen und einfügen. Aber sobald ich dann einen Paste-Befehl für eine Zelle einsetze, die nicht A1 ist, bekomme ich wieder die Fehlermeldung.
Weiß da jemand Rat?
Vielen Dank im Voraus.
MfG
Ines
Anzeige
AW: Fehler bei Copy-Methode
25.04.2012 14:13:25
Rudi
Hallo,
versuchs mal so:
  With Worksheets("PL KG")
.Cells.ClearContents
Worksheets("Formatierung_1").UsedRange.Copy _
.Cells(Rows.Count, 1).End(xlUp)
Worksheets("Formatierung_2").UsedRange.Copy _
.Cells(Rows.Count, 1).End(xlUp).Offset (1)
End With

Gruß
Rudi
Anzeige
AW: Fehler bei Copy-Methode
25.04.2012 14:35:38
Ines
Hallo Rudi,
danke für die schnelle Antwort. Jetzt bekomme ich die Fehlermeldung "Laufzeitfehler '424': Objekt erforderlich" bei dem Befehl
Worksheets("Formatierung_1").UsedRange.Copy _
.Cells(Rows.Count, 1).End (xlUp)
Gruß
Ines
nächster Versuch
25.04.2012 14:42:38
Rudi
Hallo,
  With Worksheets("PL KG")
.Cells.ClearContents
Worksheets("Formatierung_1").UsedRange.Copy _
.Cells(.Rows.Count, 1).End(xlUp)
Worksheets("Formatierung_2").UsedRange.Copy _
.Cells(.Rows.Count, 1).End(xlUp).Offset (1)
End With

Gruß
Rudi
Anzeige
AW: nächster Versuch
25.04.2012 14:53:50
Ines
Hallo Rudi,
es kommt leider noch immer die Meldung "Laufzeitfehler '424': Objekt erforderlich".
Gruß
Ines
AW: nächster Versuch
25.04.2012 15:06:53
Rudi
Hallo,
weiß der Teufel warum. Aber so geht's:
  Worksheets("PL KG").Cells.ClearContents
Worksheets("Formatierung_1").UsedRange.Copy _
Worksheets("PL KG").Cells(Rows.Count, 1).End(xlUp)
Worksheets("Formatierung_2").UsedRange.Copy _
Worksheets("PL KG").Cells(Rows.Count, 1).End(xlUp).Offset(1)

Gruß
Rudi
Anzeige
AW: nächster Versuch
25.04.2012 15:20:58
Ines
Hallo Rudi,
jetzt wird wieder der unterste Befehl markiert mit der Meldung "Laufzeitfehler '1004': Die Copy-Methode des Range-Objektes konnte nicht ausgeführt werden."
Gruß
Ines
so kommen wir nicht weiter
25.04.2012 15:32:26
Rudi
Hallo,
lad mal die Mappe hoch.
Gruß
Rudi
AW: so kommen wir nicht weiter
25.04.2012 16:05:48
Ines
Hallo Rudi,
die Datei hat leider 3,9 MB, die kann ich hier nicht hochladen. Kann ich sie Dir schicken?
Gruß
Ines
Anzeige
AW: so kommen wir nicht weiter
25.04.2012 21:01:31
Reinhard
Hallo Ines,
stell mal hier überzeugend dar warum die Mappe so groß sein muß um
deinen Kopierfehler per Vba darzustellen?
Gruß
Reinhard
AW: so kommen wir nicht weiter
26.04.2012 16:40:58
Ines
Hallo Reinhard,
der Grund ist, dass es viele Tabellenblätter sind und viele Makros, die sich gegenseitig aufrufen. Ich habe alle möglichen Werte und für dieses Problem unnötigen Makros aus der Datei entfernt, sie aber nicht klein genug für den Upload bekommen. Deshalb wollte ich die Datei komplett neu erstellen. Leider bleibe ich wieder an der Copy-Methode hängen, diesmal aber in einer kleinen Datei, die ich hochladen kann. In der Datei sind zwei Makros: SpaltensortierungAnpassen und SpaltensortierungAnpassen1. SpaltensortierungAnpassen funktioniert, enthält aber viele Select-Befehle, die man ja eigentlich vermeiden sollte. Ich verstehe aber nicht warum SpaltensortierungAnpassen1 nicht funktioniert.
Wäre echt super, wenn Du da noch eine gute Idee für mich hättest.
Danke und Gruß
Ines
https://www.herber.de/bbs/user/79960.xlsm
Anzeige
AW: so kommen wir nicht weiter
26.04.2012 18:19:39
Reinhard
Hallo Ines,
hinter Destination fehlte der Doppelpunkt.
Sub SpaltensortierungAnpassen1()
'Die Daten für die Kostenstellen aus dem SAP HR so ändern, dass sie für den Upload
'genutzt werden können
Application.ScreenUpdating = False
'Inhalt von Tabellenblatt "KST" in Tabellenblatt "Arbeitsblatt_KST" kopieren
Worksheets("KST").Copy Destination:=Worksheets("Arbeitsblatt_KST").Cells(1, 1)
Application.ScreenUpdating = True
End Sub

Gruß
Reinhard
Anzeige
AW: so kommen wir nicht weiter
27.04.2012 10:15:06
Ines
Hallo Reinhard,
danke. Manchmal sieht man einfach den Wald vor lauter Bäumen nicht. Auf den Doppelpunkt währe ich wohl nie gekommen. Jetzt funktioniert es zumindest in der neuen Datei.
Gruß
Ines
xl2010-Problem
25.04.2012 17:13:54
Jörg-HH
Hallo Ines und Rudi
ich bin hier zwar normalerweise nur Frager, aber vielleicht hilfts...
Auch ich habe einen Code, der unter XP anstandslos läuft. Mit xl2010 aber entstehen namenlose Tabellenleichen dort (statt gelöschter Blätter), wo vorher Blätter kopiert wurden. Ein Bekannter sagte mir, daß xl2010 ein Problem im Umfeld des Kopierens von Blättern habe, und die haben das im Betrieb irgendwie umgangen - ich hab aber vergessen, welche Einstellung die geändert hatten. Ich kann ihn leider erst heute Nacht fragen...
Jörg
Anzeige
AW: xl2010-Problem
26.04.2012 16:42:09
Ines
Hallo Jörg,
das wäre echt super.
Vielen Dank schon mal.
Gruß
Ines
;
Anzeige
Anzeige

Infobox / Tutorial

Fehlerbehebung bei der Copy-Methode in Excel


Schritt-für-Schritt-Anleitung

  1. Aktivieren des Zielarbeitsblatts:

    Worksheets("PL KG").Activate
  2. Inhalt löschen:

    Cells.ClearContents
  3. Daten kopieren von "Formatierung_1":

    Worksheets("Formatierung_1").UsedRange.Copy _
    Destination:=Worksheets("PL KG").Cells(Rows.Count, 1).End(xlUp).Offset(1)
  4. Daten kopieren von "Formatierung_2":

    Worksheets("Formatierung_2").UsedRange.Copy _
    Destination:=Worksheets("PL KG").Cells(Rows.Count, 1).End(xlUp).Offset(1)

Diese Schritte sollten in einer Sub-Prozedur zusammengefasst werden.


Häufige Fehler und Lösungen

  • Laufzeitfehler '1004': Die Copy-Methode des Range-Objektes konnte nicht ausgeführt werden.

    • Ursache: Oft tritt dieser Fehler auf, wenn das Ziel nicht korrekt definiert ist. Stelle sicher, dass du die Zielzelle korrekt angibst, z.B. mit Offset.
  • Laufzeitfehler '424': Objekt erforderlich.

    • Ursache: Dieser Fehler kann auftreten, wenn Referenzen auf Zellen oder Bereiche nicht korrekt sind. Überprüfe, ob alle verwendeten Objekte existieren und korrekt referenziert sind.

Alternative Methoden

Wenn das Kopieren mit der UsedRange.Copy-Methode nicht funktioniert, kannst du die Value-Eigenschaft verwenden:

Worksheets("PL KG").Range("A1").Resize(Worksheets("Formatierung_1").UsedRange.Rows.Count, Worksheets("Formatierung_1").UsedRange.Columns.Count).Value = Worksheets("Formatierung_1").UsedRange.Value

Praktische Beispiele

Hier ist ein Beispiel, wie du das Kopieren von Daten effizient umsetzen kannst:

Sub DatenKopieren()
    With Worksheets("PL KG")
        .Cells.ClearContents
        Worksheets("Formatierung_1").UsedRange.Copy _
        Destination:=.Cells(.Rows.Count, 1).End(xlUp).Offset(1)
        Worksheets("Formatierung_2").UsedRange.Copy _
        Destination:=.Cells(.Rows.Count, 1).End(xlUp).Offset(1)
    End With
End Sub

Diese Methode nutzt UsedRange und beugt so häufigen Fehlern vor.


Tipps für Profis

  • Vermeide die Verwendung von Select und Activate, um die Ausführung deiner Makros zu beschleunigen und die Wahrscheinlichkeit von Fehlern zu reduzieren.
  • Nutze With-Blöcke, um die Lesbarkeit deines Codes zu erhöhen und die Ausführung zu optimieren.
  • Überprüfe immer, ob die Zielzelle tatsächlich existiert, bevor du Daten kopierst. Dies kann viele Laufzeitfehler verhindern.

FAQ: Häufige Fragen

1. Warum funktioniert mein Makro in Excel XP, aber nicht in Excel 2010?
Excel 2010 hat einige Änderungen in der Verarbeitung von Objekten und Methoden. Achte darauf, dass du die neuesten Methoden und Eigenschaften verwendest, um Kompatibilität sicherzustellen.

2. Was kann ich tun, wenn ich ständig Laufzeitfehler erhalte?
Überprüfe deinen Code auf mögliche Syntaxfehler und stelle sicher, dass alle Objekte korrekt referenziert sind. Verwende Debugging, um die genaue Fehlerstelle zu identifizieren.

3. Wie kann ich große Datenmengen effizient kopieren?
Verwende die Value-Eigenschaft anstelle von Copy, um die Leistung zu verbessern, besonders bei großen Datenmengen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige