Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1792to1796
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
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

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
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

23 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige