Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Fehler PasteSpecial

Fehler PasteSpecial
15.11.2020 13:42:45
Andre
Hallo zusammen,
ich versuche mit einem VBA-Code ein Excelblatt zu kopieren und anschließend ohne Formeln als Werte mit gleicher Formatierung in einem neuen Tabellenblatt zu öffnen. Der Code klappt bei einem einfachen Blatt tadellos. Ich möchte den Code aber für ein Blatt mit einigen Formeln nutzen, auf dem Leer-Zeilen mit einem Auto-Filter ausgeblendet werden. Diese ausgeblendeten Leerzeilen sollen nicht mitkopiert werden. Wenn ich den Code aktivier, wird das Tabellenblatt in einer neuen Tabelle geöffnent und es wird alles kopiert (inkl. Formeln). Dabei erhalte ich den Fehler "Laufzeit-Fehler 1004: Sie können dies hier nicht einfügen, da der Kopier-Bereich und der Einfügebereich nicht die gleiche Größe haben..."
Ich nutze Excel 2016. Der Code sieht folgendermaßen aus:

Private Sub CommandButton2_Click()
Dim strTabelle As String
strTabelle = "Proforma Product engl."
Sheets(strTabelle).Copy
With ActiveSheet.UsedRange
.Copy
.PasteSpecial Paste:=xlValues
End With
Application.CutCopyMode = False
For intAnzahl = ActiveSheet.OLEObjects.Count To 1 Step -1
If ActiveSheet.OLEObjects(intAnzahl).progID = "Forms.CommandButton.2" Then
ActiveSheet.OLEObjects(intAnzahl).Delete
End If
Next
FileSaveName = Application.GetSaveAsFilename(fileFilter:="Microsoft Excel-Arbeitsmappe (*.xlsx), _
_
_
*.xlsx")
If FileSaveName  False Then
ActiveWorkbook.SaveAs FileSaveName
End If
End Sub

Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehler PasteSpecial
15.11.2020 13:52:38
Hajo_Zi
Kopiere den sichtbaren Bereich, Start, Bearbeiten, Suchen..., Gehe zu, Inhalte, sichtbare Zellen.
Excel hat auch einen Makrorecorder.

AW: Fehler PasteSpecial
15.11.2020 14:15:55
Andre
Hallo Hajo,
danke für die Antwort.
Wenn ich so vorgehe und die Inhalte dann in einem anderen Dokument einfüge, wird die Formatierung nicht genau gleich angezeigt. Hinzu kommt, dass auch die Fußzeile mitkopiert werden soll. Der Bereich, der kopiert werden soll ist ebenfalls variabel, da die Liste mal länger und mal kürzer ist. Eventuell habe ich deinen Tipp noch nicht ganz verstanden.
Der Code funktioniert ja auch mit dem Button, wenn man keine ausgeblendeten Zellen hat bzw. wird auch eine neue Datei mit den kopierten Inhalten geöffnet. Sie enthalten aber noch alle Formeln und keine Werte und außerdem erscheint der Fehler.
Viele Grüße
Andre
Anzeige
AW: Fehler PasteSpecial
15.11.2020 15:25:44
Hajo_Zi
Hallo Andre,
ich habe mich an den Code im ersten Beitrag gehlaten. Da wurde kein Format übertagen und auch nicht die Fußzeile.
Ich hbae die Aufgabe wohl falsch verstanden und bin darum raus.
Viel Erfolg noch.
Gruß Hajo
Anzeige
AW: Fehler PasteSpecial
16.11.2020 12:35:48
Andre
Eventuell habe ich es nicht richtig erklärt.
Trotzdem danke für deine Hilfe!
Viele Grüße
Andre
AW: Fehler PasteSpecial
15.11.2020 14:45:25
Daniel
Hi
In dem Fall musst du so vorgehen:
1. Blatt kopieren
2. falls der Autofilter mitkopiert wurde, diesen aufheben und alles einblenden.
3. alle Inhalte im neuen Blatt löschen
4. Zellen im alten Blatt kopieren und nacheinander Werte und Formate einfügen. Einmal kopieren reicht, du kannst die beiden PasteSpecials auch direkt nacheinander ausführen.
Gruß Daniel
Anzeige
AW: Fehler PasteSpecial
16.11.2020 12:34:42
Andre
Hi Daniel,
danke für deine Hilfe.
Ich habe jetzt einen Code über den Makrorecorder aufgenommen, der genau das macht, was ich möchte und das klappt auch in der Reihenfolge wie von dir beschrieben.
Mein Problem ist, dass das ganze über einen Button generiert werden soll. Mit dem Makro-Reader ist das ganze natürlich nicht "verallgemeinert". Ich denke das Problem liegt dabei daran, dass die neue Datei "Mappe1" heißt und wenn ich das makro wieder neu auslöse wird die Mappe anders heißen. Hast du eine Idee, wie ich das Makro also jetzt verallgemeinern kann? Ich hoffe du verstehst, was ich meine.
Sub ExcelNeu()
' ExcelNeu Makro
Sheets("Proforma Product engl.").Select
Sheets("Proforma Product engl.").Copy
Cells.Select
Selection.ClearContents
Windows("TabelleBasis.xlsm").Activate
Cells.Select
Selection.Copy
Windows("Mappe1").Activate 'Beim nächsten mal heißt die Mappe nicht mehr "Mappe 1"
Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub

Viele Grüße
Andre
Anzeige
AW: Fehler PasteSpecial
16.11.2020 13:12:32
Daniel
Hi
der vom Recorder aufgezeichnete Code ist in der Regel nicht "Makrotauglich"
ich verwende den Recorder wie ein Wörterbuch, in dem man bestimmte Dinge "nachschlagen" kann, aber nicht als "Übersetzungscomputer", der fertige Übersetzungen meines Wunsches in VBA-Code liefert.
Bei Makros sollte man immer auf die Selektion verzichten und die Befehle direkt an das Objekt anhängen.
Das mit dem Select/Selection muss der Recorder so aufzeichnen, weil wir als Mausschubser so arbeiten, aber im Makro braucht man das das nicht.
weiterhin hilfreich ist das verwenden von Variablen.
hierbei kann man das neu erzeugte Blatt gleich einer solchen zuweisen und muss sich dann nicht darum kümmern, wie dieses jetzt heißt.
Sub ExcelNeu()
Dim wsQuelle As Worksheet
Dim wsZiel As Worksheet
'--- Quellblatt festlegen
Set wsQuelle = ThisWorkbook.Sheets("Proforma Product engl.")
'--- Blatt in neue Mappe kopieren
wsQuelle.Copy
Set wsZiel = ActiveSheet
'--- Autofilter falls vorhanden ausschalten
On Error Resume Next
wsZiel.ShowAllData
On Error GoTo 0
'---- Zielblatt leeren und INhalte und Formate erneut kopieren
wsZiel.Cells.Clear
wsQuelle.Cells.Copy
wsZiel.Cells(1, 1).PasteSpecial Paste:=xlPasteAllUsingSourceTheme
wsZiel.Cells(1, 1).PasteSpecial Paste:=xlPasteValues
'--- Zum Ausgangsblatt zur?ck
ThisWorkbook.Activate
Application.CutCopyMode = False
End Sub
Gruß Daniel
Anzeige
AW: Fehler PasteSpecial
16.11.2020 14:48:31
Andre
Hallo Daniel,
Vielen Dank! Beim ersten Mal funktioniert das Makro perfekt. Wenn ich aber anschließend wieder in die Quelldatei gehe und dort das Makro dann erneut ausführen möchte, öffnet sich ein neues Fenster und Excel lädt endlos. Wenn ich die Datei wieder schließe und öffne und das Makro dann ausführe, läuft es wieder beim ersten Durchgang, aber beim zweiten nicht.
Hast du eine Idee woran das liegen könnte?
Noch zwei andere Fragen: Die neue Datei wird mit den Makros geöffnet. Kann man die Makros auch aus der neuen Datei löschen? Alternativ wird sie als .xlsx abgespeichert, dann sind die Makros ja auch weg, aber eventuell geht das ja automatisch.
Ich möchte gerne bei dem neuen Blatt bleiben und nicht die Quelldatei aufrufen. Auch wenn ich "'--- Zum Ausgangsblatt zurück
ThisWorkbook.Activate" deaktiviere, springt er nach der Ausführung des Makros auf die Quelldatei.
Viele Grüße
Andre
Anzeige
AW: Fehler PasteSpecial
16.11.2020 15:13:02
Andre
Nachtrag:
ThisWorkbook.Activate zu deaktivieren klappt doch, da habe ich mich vertan.
Es ist auch keine Endlosschleife, ich habe das mal durchlaufen lassen. Es dauert beim ersten Mal nicht lange bis das Makro durchgelaufen ist. Beim zweiten Mal aber ca. 4 Minuten.
AW: Fehler PasteSpecial
16.11.2020 15:30:16
Daniel
HI
im Prinzip gibt's zwei Möglichkeiten:
a) alles kopieren und löschen was man nicht braucht
b) leeres Blatt anlegen und nur das rüberkopieren, was man braucht.
je weniger man behalten möchte, um so sinnvoller ist Variante b)
Makros rauslöschen ist schwierig und aufwendig, da ist Speichern als xlsx das einfachste.
wenn das mit den Kopf- und Fußzeilen schwierig zu programmieren ist, kannst du dir auch ein leeres Vorlagenblatt ohne Makros aber mit der passenden Seiteneinrichtung erstellen. Da kopierst du deine Inhalte dann rein und erstellst daraus dann die neue Datei.
Immer wenns um die Seiteneinrichtung (da gehören die Kopf- und Fusszeilen mit dazu) geht, wird Excel langsam.
Davon ist leider auch das Kopieren eines Tabellenblatts betroffen, weil hier ja auch diese Einstellungen mit übernommen werden.
Anscheinend hält Excel dann mit dem Druckertreiber erstmal ein Kaffekränzchen.
Es hilft dann manchmal, den Vorgang in diese Befehlszeilen einzubetten, um das Kaffekränzchen zu vermeiden:
Application.PrintCommunication = False
hier der Code zum Blattkopieren oder Seiteeinrichten
Application.PrintCommunication = True
Gruß Daniel
Anzeige
AW: Fehler PasteSpecial
16.11.2020 16:37:11
Andre
Hi,
vielen, vielen Dank für deine Anregungen! Ich kopiere nun erst das Tabellenblatt in ein anderes Tabellenblatt (nur die Werte) und von diesem Tabellenblatt aus erstelle ich dann eine Kopie. Im Endeffekt sind es ja die gleichen Schritte (mit einem Zwischenschritt), aber damit scheint Excel besser klarzukommen.
Also besten Dank nochmal!
Nur zur Info, mein Code:
Sub KopieInExcel()
Selection.Copy
Sheets("Proforma Product engl. (2)").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.ClearContents
Sheets("Proforma Product engl.").Select
Selection.Copy
Sheets("Proforma Product engl. (2)").Select
Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'--- CommandButton entfernen
For intAnzahl = ActiveSheet.OLEObjects.Count To 1 Step -1
If ActiveSheet.OLEObjects(intAnzahl).progID = "Forms.CommandButton.1" Then
ActiveSheet.OLEObjects(intAnzahl).Delete
End If
Next
Sheets("Proforma Product engl.").Activate
Sheets("Proforma Product engl. (2)").Copy
'--- Speichern aufrufen
FileSaveName = Application.GetSaveAsFilename(fileFilter:="Microsoft Excel-Arbeitsmappe (*.xlsx), _
*.xlsx")
If FileSaveName  False Then
ActiveWorkbook.SaveAs FileSaveName
End If
End Sub

Anzeige
AW: Fehler PasteSpecial
16.11.2020 16:50:09
Andre
Oh man :(
Alles zurück. Der Code kopiert das Tabellenblatt am Anfang nicht, sondern erstellt nur die Kopie.
AW: Fehler PasteSpecial
16.11.2020 17:52:07
Andre
Habe es jetzt nach langem probieren geschafft. Es benötigt kein PasteSpecial, die Werte werden so übernommen.
Mein finaler Code:
Sub ProformaProductEnglInExcel()
Range("A1:E89").Select
Selection.Copy
Sheets("Proforma Product engl. (2)").Select
Range("A1").Select
ActiveSheet.Paste
ActiveWindow.SmallScroll Down:=18
Selection.Rows.AutoFit
' Sheet anzeigen
Sheets("Proforma Product engl.").Activate
' Kopie erstellen
Sheets("Proforma Product engl. (2)").Copy
'Speichern aufrufen
FileSaveName = Application.GetSaveAsFilename(fileFilter:="Microsoft Excel-Arbeitsmappe (*. _
xlsx), *.xlsx")
If FileSaveName  False Then
ActiveWorkbook.SaveAs FileSaveName
End If
Application.CutCopyMode = False
End Sub

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Umgang mit PasteSpecial-Fehlern in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Blatt kopieren: Verwende den Befehl Sheets("DeinBlatt").Copy, um das gewünschte Blatt in eine neue Arbeitsmappe zu kopieren.

  2. Autofilter aufheben: Wenn dein Blatt einen Autofilter hat, stelle sicher, dass dieser deaktiviert ist. Dies kannst du mit On Error Resume Next und ActiveSheet.ShowAllData erreichen.

  3. Inhalte löschen: Lösche alle Inhalte im neuen Blatt mit wsZiel.Cells.Clear.

  4. Werte und Formate einfügen: Benutze wsQuelle.Cells.Copy gefolgt von wsZiel.Cells(1, 1).PasteSpecial Paste:=xlPasteAllUsingSourceTheme und wsZiel.Cells(1, 1).PasteSpecial Paste:=xlPasteValues, um sowohl die Formatierung als auch die Werte einzufügen.

  5. Speichern: Verwende Application.GetSaveAsFilename für das Speichern der neuen Datei.

Hier ist ein Beispielcode, der diese Schritte umsetzt:

Sub KopiereUndSpeichere()
    Dim wsQuelle As Worksheet
    Dim wsZiel As Worksheet

    Set wsQuelle = ThisWorkbook.Sheets("DeinBlatt")
    wsQuelle.Copy
    Set wsZiel = ActiveSheet

    On Error Resume Next
    wsZiel.ShowAllData
    On Error GoTo 0

    wsZiel.Cells.Clear
    wsQuelle.Cells.Copy
    wsZiel.Cells(1, 1).PasteSpecial Paste:=xlPasteAllUsingSourceTheme
    wsZiel.Cells(1, 1).PasteSpecial Paste:=xlPasteValues

    Dim FileSaveName As Variant
    FileSaveName = Application.GetSaveAsFilename(fileFilter:="Microsoft Excel-Arbeitsmappe (*.xlsx), *.xlsx")
    If FileSaveName <> False Then
        ActiveWorkbook.SaveAs FileSaveName
    End If

    Application.CutCopyMode = False
End Sub

Häufige Fehler und Lösungen

  • Laufzeit-Fehler 1004: "Sie können dies hier nicht einfügen, da der Kopier-Bereich und der Einfügebereich nicht die gleiche Größe haben."

    • Lösung: Stelle sicher, dass du nur sichtbare Zellen kopierst. Nutze SpecialCells(xlCellTypeVisible) um nur die sichtbaren Zellen zu kopieren.
  • Formatierung stimmt nicht überein:

    • Lösung: Überprüfe, ob du sowohl die Werte als auch die Formate korrekt über PasteSpecial einfügst.
  • Endlosschleife beim Kopieren:

    • Lösung: Deaktiviere Application.PrintCommunication während des Kopiervorgangs, um die Leistung zu optimieren.

Alternative Methoden

Eine alternative Methode besteht darin, nur die Werte zu kopieren, ohne die Formatierungen. Dies kann einfacher sein, wenn du keine speziellen Formatierungen benötigst:

wsQuelle.Cells.Copy
wsZiel.Cells.PasteSpecial Paste:=xlPasteValues

Diese Methode kann auch schneller sein, da Excel weniger Informationen verarbeiten muss.


Praktische Beispiele

Hier sind einige praktische Beispiele für die Verwendung von .PasteSpecial in Excel VBA:

  1. Werte und Formate kopieren:

    wsZiel.Cells(1, 1).PasteSpecial Paste:=xlPasteAllUsingSourceTheme
    wsZiel.Cells(1, 1).PasteSpecial Paste:=xlPasteValues
  2. Nur Werte kopieren:

    wsQuelle.Cells.Copy
    wsZiel.Cells.PasteSpecial Paste:=xlPasteValues
  3. Kopieren mit Fehlerbehandlung:

    On Error Resume Next
    wsZiel.ShowAllData
    On Error GoTo 0

Tipps für Profis

  • Vermeide die Verwendung von Select und Selection: Arbeite direkt mit Objekten, um den Code effizienter zu gestalten.

  • Nutze Variablen für Objekte: Das Zuweisen von Arbeitsblättern zu Variablen erleichtert die Handhabung und reduziert die Fehleranfälligkeit.

  • Optimierung durch PrintCommunication: Schalte Application.PrintCommunication auf False, bevor du große Mengen an Daten kopierst, um die Verarbeitungsgeschwindigkeit zu erhöhen.

Application.PrintCommunication = False
' Hier der Kopiervorgang
Application.PrintCommunication = True

FAQ: Häufige Fragen

1. Was bedeutet xlPasteValues? xlPasteValues ist eine Konstante in Excel VBA, die angibt, dass nur die Werte ohne Formatierungen eingefügt werden sollen.

2. Wie kann ich sicherstellen, dass nur sichtbare Zellen kopiert werden? Verwende Selection.SpecialCells(xlCellTypeVisible).Copy, um nur die sichtbaren Zellen zu kopieren.

3. Was kann ich tun, wenn mein Makro langsam läuft? Optimierung durch Minimierung der Anzahl der Select-Befehle und Verwendung von Application.PrintCommunication kann die Leistung verbessern.

4. Wie kann ich das Kopieren und Einfügen in VBA automatisieren? Durch das direkte Arbeiten mit Objekten und das Vermeiden von Select kannst du den Prozess automatisieren und effizienter gestalten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige