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

VBA PasteSpecial in Excel — nur Werte, Formate oder Formeln einfügen (und warum es fehlschlägt)

|

VBA PasteSpecial in Excel — nur Werte, Formate oder Formeln einfügen (und warum es fehlschlägt)

KurzfassungPasteSpecial ist ein gefilterter Einfügevorgang: Sie kopieren einen Bereich mit .Copy in die Zwischenablage und wählen dann aus, welche einzelne Schicht durchkommt — Werte, Formate, Formeln oder Spaltenbreiten — sowie optional eine Operation (addieren, multiplizieren, transponieren). Der Haken: PasteSpecial liest eine aktive Zwischenablage, muss also direkt auf ein .Copy folgen; alles, was die Zwischenablage dazwischen leert — eine MsgBox, ein weiteres Copy, sogar wenn Excel den Fokus verliert — liefert PasteSpecial method of Range class failed. Wenn Sie alles unverändert kopieren wollen, brauchen Sie PasteSpecial gar nicht erst — dafür gibt es Copy Destination.

' PasteSpecial liest die Zwischenablage, deshalb direkt davor kopieren.
Range("A1:A20").Copy                                ' Zwischenablage laden
Range("C1").PasteSpecial Paste:=xlPasteValues       ' nur die Werte kommen durch
Application.CutCopyMode = False                      ' Laufrahmen loeschen

' Waehlen Sie in einem Aufruf, WAS durchkommt UND WIE es ankommt:
Range("E1:E20").Copy
Range("G1").PasteSpecial Paste:=xlPasteValues, _
    Operation:=xlPasteSpecialOperationAdd, Transpose:=False

PasteSpecial ist das Code-Pendant zum Dialogfeld Inhalte einfügen — dem, mit dem Sie nur Werte, nur Formate einfügen oder eine Spalte in eine Zeile transponieren können. Einfaches Copy Paste bewegt die ganze Zelle; PasteSpecial ist das Werkzeug, wenn Sie nur eine Schicht davon wollen und sonst nichts. Diese Kontrolle kommt mit einer harten Einschränkung, die fast jeden beim ersten Mal stolpern lässt — deshalb fangen wir dort an und bauen von da aus weiter.

Was Sie lernen

  • Das Denkmodell — PasteSpecial ist ein Filter über einem Einfügevorgang, keine andere Art von Kopieren
  • Die eine Regel, die die meisten Fehler verhindert — es liest eine aktive Zwischenablage, .Copy muss also unmittelbar davor stehen
  • Die zwei Achsen — was durchkommt (Paste:=) und wie es ankommt (Operation:=, Transpose:=)
  • Das reine Werte-Einfügen und seine Formatfalle (xlPasteValues vs. xlPasteValuesAndNumberFormats)
  • Aufräumen mit Application.CutCopyMode = False
  • Wann PasteSpecial das falsche Werkzeug ist und eine direkte Bewegung besser passt

Das Denkmodell: ein Filter über einem Einfügevorgang

Ein einfacher Einfügevorgang kopiert eine Zelle komplett — ihren Wert, ihre Formel, ihr Zahlenformat, ihre Rahmen, ihre Füllung, alles auf einmal. PasteSpecial setzt einen Filter vor diesen Einfügevorgang. Sie kopieren mit .Copy weiterhin die gesamte Quelle in die Zwischenablage, aber im Moment des Einfügens sagen Sie: „Lass nur diese eine Schicht durch." Stellen Sie sich die Zwischenablage als einen Stapel durchsichtiger Folien vor — Wert, Formel, Format, Spaltenbreite — und PasteSpecial als das eine Werkzeug, mit dem Sie eine einzelne Folie abheben und auf dem Ziel ablegen.

Das ist die ganze Idee, und sie erklärt, warum PasteSpecial immer aus zwei Hälften besteht: einem .Copy, das jede Schicht in die Zwischenablage lädt, und einem .PasteSpecial, das auswählt, welche Schicht bleibt. Fehlt die erste Hälfte, gibt es nichts zu filtern — und genau das ist der Fehler weiter unten.

Die wichtigste Regel: es liest eine aktive Zwischenablage

Hier ist der Fehler hinter fast jedem PasteSpecial method of Range class failed. PasteSpecial merkt sich nicht den Bereich, den Sie kopiert haben — es liest in dem Moment, in dem es läuft, die Windows-Zwischenablage. Wenn zwischen Ihrem .Copy und Ihrem .PasteSpecial irgendetwas die Zwischenablage leert, hat der Einfügevorgang nichts zum Arbeiten und wirft einen Laufzeitfehler:

Range("A1:A20").Copy
MsgBox "Gleich wird eingefuegt"          ' diese MsgBox kann die Zwischenablage leeren
Range("C1").PasteSpecial xlPasteValues  ' Laufzeitfehler 1004: PasteSpecial method ... failed

Die Zwischenablage ist zustandsbehaftet und empfindlich. Sie wird durch ein weiteres .Copy oder .Cut geleert, durch Application.CutCopyMode = False, oft durch eine MsgBox oder InputBox, und manchmal einfach dadurch, dass Excel den Fokus verliert. Die Lösung ist Disziplin, kein Trick: Halten Sie .Copy und .PasteSpecial direkt nebeneinander, ohne irgendetwas dazwischen — keine Dialoge, keine weiteren Kopien, keine Benutzerinteraktion. Wenn Sie eine Schleife brauchen, kopieren Sie innerhalb der Schleife unmittelbar vor jedem Einfügen, niemals nur einmal davor.

Die zwei Achsen: was durchkommt und wie es ankommt

Jeder PasteSpecial-Aufruf wird durch zwei unabhängige Entscheidungen beschrieben. Die erste, Paste:=, wählt, welche Schicht durchkommt:

Range("A1").PasteSpecial Paste:=xlPasteValues          ' nur die resultierenden Werte
Range("A1").PasteSpecial Paste:=xlPasteFormulas        ' die Formeln (Bezuege verschieben sich)
Range("A1").PasteSpecial Paste:=xlPasteFormats         ' Schrift, Fuellung, Rahmen - keine Daten
Range("A1").PasteSpecial Paste:=xlPasteColumnWidths    ' nur die Spaltenbreiten
Range("A1").PasteSpecial Paste:=xlPasteAll             ' alles (wie ein normaler Einfuegevorgang)

Die zweite, Operation:=, entscheidet, wie die ankommenden Zahlen mit dem verrechnet werden, was schon da ist — xlPasteSpecialOperationAdd, Subtract, Multiply, Divide oder None. Zwei Schalter vervollständigen das Bild: Transpose:=True dreht Zeilen in Spalten, und SkipBlanks:=True lässt das Ziel überall dort unangetastet, wo die Quellzelle leer ist. Der klassische Trick „addiere eine Korrektur zu jeder Zahl in einer Spalte" ist ein einziger Aufruf: Korrektur in eine Zelle schreiben, mit .Copy kopieren, dann PasteSpecial Paste:=xlPasteValues, Operation:=xlPasteSpecialOperationAdd über den Bereich legen.

Der häufigste Einfügevorgang — nur Werte — und seine Formatfalle

Nur Werte einzufügen ist der Grund, warum die meisten Leute Inhalte einfügen überhaupt öffnen: Es verwandelt aktive Formeln in die Zahlen, die sie erzeugt haben, sodass Sie die Quelle löschen oder volatile Formeln stoppen können (die ganze Geschichte steht in Paste Values). Aber es gibt eine Falle. Das nackte xlPasteValues kopiert die Zahl, nicht das Zahlenformat — eine Spalte mit Datumswerten kommt also als Seriennummern wie 45000 zurück, und Währungen verlieren ihr Symbol:

srcDates.Copy
dst.PasteSpecial Paste:=xlPasteValues                 ' Datumswerte kommen als 45000, 45001, ...
dst.PasteSpecial Paste:=xlPasteValuesAndNumberFormats ' Datumswerte kommen als Datum an - meist das Ziel

Nutzen Sie xlPasteValuesAndNumberFormats, sobald die Anzeige zählt — bei Datumswerten, Währungen und Prozentwerten fast immer der Fall. Reservieren Sie das nackte xlPasteValues für Fälle, in denen Sie wirklich rohe Zahlen ohne jede übernommene Formatierung wollen.

Aufräumen: CutCopyMode und der Laufrahmen

Nach einem .Copy legt Excel einen schimmernden Laufrahmen um die Quelle und lässt die Zwischenablage scharf. Application.CutCopyMode = False löscht beides — es entfernt den Rahmen und teilt Excel mit, dass Sie fertig sind. Für den Einfügevorgang selbst ist es nicht zwingend nötig, aber wenn Sie es weglassen, fügt die nächste versehentliche Enter-Taste erneut ein, und ein Bereich, der „scharf" bleibt, ist eine häufige Quelle der oben beschriebenen Fragilität. Machen Sie es zur letzten Zeile jedes Kopier-/Einfügeblocks, direkt nach dem PasteSpecial.

Wenn PasteSpecial das falsche Werkzeug ist

PasteSpecial verdient seinen Platz nur, wenn Sie eine einzelne Schicht (Werte, Formate, Formeln) oder eine Operation (transponieren, addieren) brauchen. Wenn Sie einen Bereich unverändert kopieren — Wert, Formel und Format zusammen — brauchen Sie die Zwischenablage überhaupt nicht: src.Copy Destination:=dst erledigt die ganze Kopie in einer Anweisung, ohne dass etwas gelöscht oder beschädigt werden könnte. Und wenn Sie nur Werte wollen, ist dst.Value = src.Value noch schneller und berührt die Zwischenablage nie — das umgeht jeden Fehlermodus in diesem Guide. Die Faustregel ist einfach: Greifen Sie zu PasteSpecial für einen gefilterten Einfügevorgang und zu Copy Destination für eine vollständige Kopie. Ein PasteSpecial, wo eine einfache Zuweisung reichen würde, ist eine fragile Zeile, die nur darauf wartet, zu brechen.

Wie ExcelMaster hilft

Die Kombination .Copy gefolgt von .PasteSpecial ist genau die Art von Code, die im schnellen Test funktioniert und in der Produktion bricht — eine MsgBox schiebt sich zwischen die beiden Zeilen, eine Schleife kopiert einmal davor statt darin, xlPasteValues entfernt still die Datumsformate, und plötzlich wirft das Makro PasteSpecial method of Range class failed oder fügt jemandem Seriennummern ein, der ihnen vertraut.

ExcelMaster lässt Sie beschreiben, welchen Einfügevorgang Sie wollen — „hier nur die Werte einfügen", „nur die Formatierung aus diesem Block kopieren", „diese Spalte in eine Zeile transponieren" — und schreibt das passende PasteSpecial mit .Copy direkt davor, xlPasteValuesAndNumberFormats, wenn die Anzeige zählt, und Application.CutCopyMode = False zum Aufräumen. Wenn eine vollständige Kopie reicht, überspringt es die Zwischenablage komplett. Sie behalten die Arbeitsmappe und den Code.

Häufig gestellte Fragen

Warum tritt PasteSpecial method of Range class failed auf?

Weil PasteSpecial die aktive Zwischenablage liest und dort nichts liegt. Es merkt sich nicht den Bereich, den Sie vorher kopiert haben — es liest, was in dem Moment, in dem es läuft, auf der Zwischenablage ist. Wenn eine MsgBox, ein weiteres .Copy, Application.CutCopyMode = False oder ein Fokusverlust von Excel die Zwischenablage zwischen Ihrem Kopieren und Ihrem Einfügen geleert hat, schlägt die Methode fehl. Halten Sie .Copy und .PasteSpecial auf benachbarten Zeilen, ohne irgendetwas dazwischen.

Wie füge ich in VBA nur Werte ein?

Kopieren Sie die Quelle mit .Copy, dann target.PasteSpecial Paste:=xlPasteValues, und schließen Sie mit Application.CutCopyMode = False ab. Wenn die Zellen Datumswerte, Währungen oder Prozentwerte enthalten, nutzen Sie stattdessen xlPasteValuesAndNumberFormats, damit die Formatierung mitkommt — das nackte xlPasteValues fügt die rohen Zahlen ein, und Datumswerte kommen als Seriennummern wie 45000 an. Für reine Werte ganz ohne Zwischenablage ist target.Value = source.Value noch einfacher.

Was ist der Unterschied zwischen xlPasteValues und xlPasteValuesAndNumberFormats?

xlPasteValues fügt nur die resultierenden Zahlen und Texte ein und lässt das Zahlenformat weg — ein Datum erscheint also als Seriennummer, und Währungen verlieren ihr Symbol. xlPasteValuesAndNumberFormats fügt die Werte und das Anzeigeformat ein, sodass Datumswerte Datumswerte bleiben und Währungen ihr Symbol behalten. Nutzen Sie Zweiteres, sobald die Anzeige zählt — das ist meistens der Fall.

Wie transponiere ich einen Bereich mit PasteSpecial?

Kopieren Sie die Quelle mit .Copy und fügen Sie dann mit Transpose:=True ein, zum Beispiel target.PasteSpecial Paste:=xlPasteValues, Transpose:=True. Das dreht Zeilen in Spalten und Spalten in Zeilen. Kombinieren Sie es mit xlPasteValues, wenn nur die Daten transponiert werden sollen, oder mit xlPasteAll, um die Formatierung gleich mitzunehmen.

Kann ich mit PasteSpecial einen Zahlenbereich addieren oder multiplizieren?

Ja — das ist die Achse Operation:=. Schreiben Sie den Operanden in eine Zelle, kopieren Sie sie mit .Copy, und rufen Sie dann über den Zielbereich PasteSpecial Paste:=xlPasteValues, Operation:=xlPasteSpecialOperationAdd auf (oder Multiply, Subtract, Divide). Excel verrechnet die kopierte Zahl mit jedem vorhandenen Wert direkt vor Ort — ein einziger Aufruf, um eine ganze Spalte um eine Korrektur zu erhöhen oder mit einem Faktor zu skalieren.

Getestet in

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

Weiterführende Anleitungen: VBA Werte einfügen · VBA Copy Destination · VBA Kopieren und Einfügen · VBA Range · VBA Formula