🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA Blatt kopieren in Excel — ein Arbeitsblatt duplizieren, ohne eine neue Arbeitsmappe zu erzeugen

|

VBA Blatt kopieren in Excel — ein Arbeitsblatt duplizieren, ohne eine neue Arbeitsmappe zu erzeugen

KurzfassungWorksheet.Copy nimmt dieselbe Before:=/After:=-Positionierung, die Sie bei Add nutzen, aber mit zwei Unterschieden, die jeden erwischen. Erstens: Es gibt nichts zurück — es gibt kein Set ws = sheet.Copy, also greifen Sie die frische Kopie in der unmittelbar nächsten Zeile über ActiveSheet. Zweitens, und das ist der große: ws.Copy ohne Ziel kopiert nicht innerhalb der Arbeitsmappe — es erstellt eine brandneue Arbeitsmappe, die die Kopie enthält. Übergeben Sie immer ein Before oder After, es sei denn, eine neue Datei ist genau das, was Sie wollen.

Sub DuplicateTemplate()
    Dim src As Worksheet, copy As Worksheet
    Set src = ThisWorkbook.Worksheets("Template")

    src.Copy After:=ThisWorkbook.Worksheets(Worksheets.Count)  ' Duplikat ans Ende
    Set copy = ActiveSheet                                     ' die Kopie ist jetzt aktiv
    copy.Name = "Template " & Format(Now, "hhmmss")            ' sofort umbenennen
End Sub

Worksheet.Copy ist die Code-Fassung von Rechtsklick auf ein Register ▸ Verschieben oder kopieren ▸ Kopie erstellen. So stanzen Bericht-Makros Monat für Monat ein frisches Blatt aus einer Vorlage. Es ist zugleich die überraschendste Methode der ganzen Blattverwaltungs-Familie, denn der „naheliegende" Aufruf — Sheets("Template").Copy ohne Argumente — tut etwas völlig anderes, als der Name nahelegt.

Was Sie lernen

  • Das Denkmodell — Copy ist der Zwilling von Add: gleiche Positionierung, kein Rückgabewert
  • Die Überraschung, die die meisten Makros bricht — ein blankes Copy erzeugt eine neue Arbeitsmappe
  • Wie Sie die Kopie referenzieren, wenn die Methode nichts zurückgibt
  • Was mit einem kopierten Blatt mitwandert — Formeln, Formatierung, Code und definierte Namen
  • Wie Move Copy mit umgekehrter Absicht spiegelt, und wie Sie in eine andere Arbeitsmappe kopieren

Das Denkmodell: Copy ist der Zwilling von Add, ohne Rückgabewert

Ein Blatt hinzuzufügen und eines zu kopieren teilen eine Grammatik. Beide nehmen Before:= und After:=, um zu sagen, wo das Blatt landet, und beide setzen standardmäßig auf eine Position statt ans Ende. Der Unterschied: Add ist eine Funktion, die Ihnen das neue Blatt reicht, während Copy eine Methode ist, die überhaupt nichts zurückgibt. Sie können nicht Set ws = src.Copy schreiben; das ist ein Kompilierfehler.

Excel lässt Ihnen also genau einen Weg, das frische Duplikat zu greifen: Direkt nachdem Copy läuft, wird die Kopie zum aktiven Blatt. Fangen Sie sie in der nächsten Zeile ab, bevor irgendetwas anderes den Fokus stehlen kann:

src.Copy After:=Worksheets(Worksheets.Count)
Dim copy As Worksheet
Set copy = ActiveSheet          ' das IST die Kopie - jetzt greifen

Das ist eine der seltenen Stellen, an denen der Verlass auf ActiveSheet korrekt statt schlampig ist, denn Copy lässt das neue Blatt wirklich aktiv, und es gibt keinen besseren Griff. Die Disziplin besteht darin, es sofort zu tun — ein Calculate, ein DoEvents oder ein Ereignishandler zwischen Copy und Set copy = ActiveSheet kann den Fokus verschieben und Ihnen das falsche Blatt reichen.

Die Überraschung, die die meisten Makros bricht: ein blankes Copy erzeugt eine neue Arbeitsmappe

Hier ist das Verhalten, das Leute zu Suchmaschinen treibt. Man würde vernünftigerweise erwarten, dass Sheets("Template").Copy — ohne Argumente — das Blatt innerhalb der aktuellen Arbeitsmappe dupliziert. Tut es nicht. Ein Copy mit weder Before noch After erstellt eine neue Arbeitsmappe mit einem einzigen Blatt und legt die Kopie dort ab. Führen Sie es in einer Schleife aus, und Sie bekommen einen Stapel neuer Fenster statt eines Stapels neuer Register.

src.Copy                        ' KEIN lokales Duplikat - eine ganz neue Arbeitsmappe erscheint

Die Regel ist einfach: Übergeben Sie immer ein Ziel, wenn Sie ein Duplikat innerhalb der Arbeitsmappe wollen. Die argumentlose Form ist allerdings kein Bug — sie ist die sauberste idiomatische Wendung in ganz VBA, um ein einzelnes Blatt als eigene Datei zu exportieren:

src.Copy                                 ' neue Arbeitsmappe mit nur diesem Blatt
ActiveWorkbook.SaveAs "C:\Reports\September.xlsx", FileFormat:=xlOpenXMLWorkbook
ActiveWorkbook.Close SaveChanges:=False

So bedient dieselbe Methode zwei Absichten, abhängig von einem einzigen Argument. Entscheiden Sie, welche Sie meinen, und lassen Sie ein fehlendes After nie ein „dieses Register duplizieren" in ein „vierzig Arbeitsmappen öffnen" verwandeln.

Was mit einem kopierten Blatt mitwandert

Copy klont das Objekt, nicht nur die Werte — und das ist mehr, als die meisten sich vorstellen. Ein kopiertes Blatt bringt seine Formeln, Formatierung, Diagramme, Formen, bedingte Formatierung, den Code in seinem Blattmodul und alle blattbezogenen definierten Namen mit. Daraus folgen zwei Konsequenzen:

  • Formeln, die auf andere Blätter verwiesen, behalten diese Verweise, sodass eine Kopie innerhalb derselben Arbeitsmappe still auf die Nachbarn des Originals zurückzeigen kann — prüfen Sie, ob Sie die Verknüpfungen umgelenkt haben wollten.
  • Duplizierte definierte Namen sind der klassische Nebeneffekt: Kopieren Sie ein Blatt mit einem blattbezogenen Namen, und Excel fragt womöglich zu einem bereits existierenden Namen nach oder erstellt still einen zweiten, anders gebundenen.

Wollen Sie nur die Daten, kopieren Sie nicht das Blatt — kopieren Sie den Bereich. dst.Range("A1:Z100").Value = src.Range("A1:Z100").Value verschiebt Werte ohne jeden Ballast. Das ganze Blatt zu kopieren ist das richtige Werkzeug, wenn Sie die Vorlage — Layout, Formeln und Code — bewusst unversehrt reproduzieren wollen.

Die Kopie benennen, und wie Move Copy spiegelt

Excel benennt ein Duplikat automatisch Template (2), Template (3) und so weiter, Sie benennen es also fast immer sofort um. Da es keinen Rückgabewert gibt, benennen Sie über das aktive Blatt in der Zeile direkt nach Copy um, und es gelten dieselben Regeln wie im Add-Artikel — 31 Zeichen, eindeutig, kein : \ / ? * [ ].

Worksheet.Move ist das Spiegelbild von Copy. Es nimmt die identischen Before:=/After:=-Argumente, aber es verschiebt das Blatt, statt es zu duplizieren, und ein blankes Move ohne Ziel öffnet ebenfalls eine neue Arbeitsmappe — es bewegt das Blatt vollständig aus der aktuellen heraus. Gleiche Argumentform, entgegengesetzte Absicht:

src.Move After:=Worksheets(Worksheets.Count)   ' ans Ende verschieben (kein Duplikat)
src.Copy To:=Workbooks("Report.xlsx").Worksheets(1)   ' in eine andere geoeffnete Arbeitsmappe kopieren

Um in eine andere Arbeitsmappe zu kopieren, zielen Sie im Before/After-Argument auf deren Blatt — beide Dateien müssen geöffnet sein. Die Faustregel über die ganze Methode hinweg: Übergeben Sie immer ein Ziel, fangen Sie die Kopie in der nächsten Zeile über ActiveSheet ab, denken Sie daran, dass die Kopie Code und Namen mitträgt, und greifen Sie zur blanken Form nur, wenn „neue Arbeitsmappe" das eigentliche Ziel ist.

Wie ExcelMaster hilft

Ein Blatt zu kopieren verbirgt eine Mine — die argumentlose Form öffnet eine neue Arbeitsmappe, statt zu duplizieren — und zwei leisere Fallen: keinen Rückgabewert zum Greifen und eine Kopie, die ihren Code und ihre definierten Namen mitschleppt.

ExcelMaster lässt Sie die Absicht klar aussprechen — „dupliziere das Template-Blatt ans Ende und benenne es nach dem heutigen Datum" oder „exportiere dieses Blatt als eigene Datei" — und schreibt für jede die richtige Form: ein positioniertes Copy mit einem ActiveSheet-Abfangen und einer Umbenennung für das Duplikat innerhalb der Arbeitsmappe, oder ein blankes Copy plus SaveAs für den Export. Es warnt außerdem, wenn ein kopiertes Blatt Formeln oder Namen trägt, die kollidieren werden. Sie behalten die Arbeitsmappe und den Code.

Häufig gestellte Fragen

Wie kopiere ich in VBA ein Arbeitsblatt?

Nutzen Sie Worksheet.Copy mit einem Ziel: src.Copy After:=Worksheets(Worksheets.Count) dupliziert das Blatt ans Ende. Weil Copy nichts zurückgibt, greifen Sie das neue Blatt in der nächsten Zeile über ActiveSheetSet copy = ActiveSheet — und benennen es dann um. Übergeben Sie immer Before:= oder After:=; die argumentlose Form tut etwas anderes.

Warum öffnet mein Copy-Makro eine neue Arbeitsmappe?

Weil Sie Copy ohne Before- oder After-Argument aufgerufen haben. Ein blankes Worksheet.Copy dupliziert nicht innerhalb der aktuellen Arbeitsmappe — es erstellt eine neue Arbeitsmappe mit einem einzigen Blatt, die die Kopie enthält. Übergeben Sie ein Ziel (After:=Worksheets(Worksheets.Count)), um an Ort und Stelle zu duplizieren, und reservieren Sie die argumentlose Form für den Export eines Blatts als eigene Datei.

Wie bekomme ich eine Referenz auf das kopierte Blatt?

Copy hat keinen Rückgabewert, Sie können also nicht Set ws = src.Copy schreiben. Stattdessen wird die Kopie unmittelbar nach dem Aufruf zum aktiven Blatt, fangen Sie sie also mit Set copy = ActiveSheet in der unmittelbar nächsten Zeile ab — bevor ein Calculate, DoEvents oder Ereignishandler den Fokus verschieben und Ihnen das falsche Blatt reichen kann.

Wie kopiere ich ein Blatt in eine andere Arbeitsmappe?

Zielen Sie im Positionierungsargument auf ein Blatt in der anderen Arbeitsmappe, bei beiden geöffneten Dateien: src.Copy After:=Workbooks("Report.xlsx").Worksheets(Worksheets.Count). Die Kopie trägt ihre Formeln, Formatierung und ihren Code mit; achten Sie auf Formeln, die auf die Quell-Arbeitsmappe verwiesen, da sie auf die Originaldatei zurückzeigen können.

Was ist der Unterschied zwischen Copy und Move?

Worksheet.Copy dupliziert das Blatt; Worksheet.Move verschiebt es und entfernt es aus seiner ursprünglichen Position. Beide nehmen dieselben Before:=/After:=-Argumente, und beide öffnen eine neue Arbeitsmappe, wenn sie ohne Ziel aufgerufen werden. Nutzen Sie Copy, um ein Duplikat zu stanzen, und Move, um ein Blatt umzusortieren oder herauszulösen.

Getestet in

Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 14.09.2026.

Verwandte Anleitungen: VBA Blatt hinzufügen · VBA Blatt löschen · VBA Worksheets · VBA Arbeitsmappe öffnen · VBA ThisWorkbook