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

Forumthread: Tabellenblätter in neue Datei hart kopieren

Tabellenblätter in neue Datei hart kopieren
21.08.2017 14:17:46
Makroschnacker
Guten Mittag liebes Forum,
ich möchte aus einer Excel-Datei mit 2 Tabellenblätter die Daten kopieren und in einer neuen Datei einfügen. Sie soll vom Format und den Daten her identisch sein, allerdings unverformelt, also es sollen nur die Werte kopiert werden. Anschließend soll die Datei unter einem bestimmten Namen abgespeichert werden.
Dies in VBA zu automatisieren kam mir von der Grundidee nicht schwer vor, allerdings ergaben meine bisherigen Ansätze immer nur Fehler. Könnt ihr mir da weiterhelfen?
Gruß Mr. M
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Nachfrage
21.08.2017 14:55:47
Michael
Hallo!
Sollen beide Blätter der Quell-Datei übertragen werden oder nur eines? Wie sind die Blätter benannt, die kopiert werden sollen?
Wie kommt es zu dem bestimmten Namen, unter dem die Ziel-Datei abgespeichert werden soll? Soll dieser fest im Code stehen, soll der aus einem Zellbereich erstellt werden, User-Eingabe...?
Lg
Michael
Anzeige
AW: Nachfrage
21.08.2017 15:17:42
Makroschnacker
Beide Tabellenblätter sollen übertragen werden. Sie heißen "Abflüsse" und "Versand".
Der bestimmte Name soll fest im Code stehen. Den würde ich dann noch einfügen.
Gruß M
Dann so...
21.08.2017 16:53:44
Michael
...
Sub a()
Const PFAD$ = "U:\" 'Speicher-Pfad, endet auf "\"!, anpassen
Const DNAME$ = "Test.xlsx" 'Dateiname + Typ (!), anpassen
Dim WbQ As Workbook: Set WbQ = ThisWorkbook
Dim WbZ As Workbook, i&
With WbQ
.Worksheets("Abflüsse").Copy
Set WbZ = ActiveWorkbook
.Worksheets("Versand").Copy _
after:=WbZ.Worksheets(WbZ.Worksheets.Count)
End With
With WbZ
For i = 1 To .Worksheets.Count
.Worksheets(i).UsedRange.Value = .Worksheets(i).UsedRange.Value
Next i
.SaveAs PFAD & DNAME, xlWorkbookNormal
.Close True 'Neue Datei schließen, optional, ggf. anpassen
End With
Set WbQ = Nothing: Set WbZ = Nothing
End Sub
Erforderliche Anpassungen sind im Code kommentiert.
LG
Michael
Anzeige
AW: Dann so...
25.08.2017 14:37:40
Makroschnacker
Hallo Michael,
erstmal vielen Dank für deinen Code! Er funktioniert fast komplett. Das harte Kopieren funktioniert, die Speicherung unter dem richtigen Namen auch. Allerdings scheitert nach dem Schließen der Datei der erneute Öffnungsversuch. Ich erhalte folgende Fehlermeldung:
"Die Datei '...' kann von Excel nicht geöffnet werden, da das Dateiformat oder die Dateierweiterung ungültig ist. Überprüfen Sie, ob die Datei beschädigt ist und ob die Dateierweiterung dem Dateiformat entspricht."
Kannst du mir da weiterhelfen?
Gruß Mr. M
Anzeige
Naja...
25.08.2017 14:48:33
Michael
mysteriöser M,
...da ist die Frage, ob in Deinen Original-Blättern ebenfalls Makros gespeichert sind; also nicht nur in allgemeinen Modulen der Mappe oder im Modul der Mappe selbst, sondern ob in den betroffenen Tabellenblatt-Modulen von "Abflüsse" bzw. "Versand" Makros enthalten sind (bspw. Worksheet_SelectionChange o.Ä.).
Wenn dem so ist, ist das insofern problematisch, da Tabellenblatt-Codes beim Kopieren der Blätter in eine neue Mappe mitgenommen werden (anders als Codes in allgemeinen Modulen). Nachdem mein o.a. Code im Dateiformat ".xlsx" abspeichert, kommt es dann zu diesem Fehler, da die Tabellenblatt-Makros eine ".xlsm" verlangen würden.
Ein Workaround: Statt die Tabellenblätter zu kopieren, werden nur die Zell-Werte der jeweiligen Blätter in neue Blätter kopiert.
Wie sieht's also in Deinen Blättern aus? Läuft da Blatt-bezogener Code?
LG
Michael
P.S.: Nachdem Du relativ lange brauchst, um in diesem Faden zu antworten, ein Hinweis: nach gut einer Woche landen komplette Fäden im Archiv, und ein Antworten ist dann nicht mehr möglich. Ggf. musst Du diese Frage in einem neuen Faden nochmals aufmachen, wenn dieser Faden zu ist.
Anzeige
AW: Naja...
25.08.2017 15:05:29
Makroschnacker
Richtig erkannt. In den Tabellenblättern läuft Blatt-bezogener Code.
Nur die Zell-Werte zu kopieren, wäre wahrscheinlich der richtige Lösungsansatz.
Danke für den Tipp.
Dann versuch mal so...
25.08.2017 15:30:23
Michael
M,
Sub a()
Const PFAD$ = "U:\" 'Speicher-Pfad, endet auf "\"!, anpassen
Const DNAME$ = "Test.xlsx" 'Dateiname + Typ (!), anpassen
Dim WbQ As Workbook: Set WbQ = ThisWorkbook
Dim WbZ As Workbook, i&, j&
With Application
j = .SheetsInNewWorkbook
.SheetsInNewWorkbook = 2
End With
Set WbZ = Workbooks.Add
With WbZ
WbQ.Worksheets("Abflüsse").UsedRange.Copy
.Worksheets(1).Range("A1").PasteSpecial xlPasteValues
.Worksheets(1).Range("A1").PasteSpecial xlPasteFormats
WbQ.Worksheets("Versand").UsedRange.Copy
.Worksheets(2).Range("A1").PasteSpecial xlPasteValues
.Worksheets(2).Range("A1").PasteSpecial xlPasteFormats
.SaveAs PFAD & DNAME, xlWorkbookNormal
.Close True
End With
Application.SheetsInNewWorkbook = j
Set WbQ = Nothing: Set WbZ = Nothing
End Sub
LG
Michael
Anzeige
AW: Naja...
25.08.2017 15:49:10
Makroschnacker
Hast du dafür einen Vorschlag zur Umsetzung?
Ja, wenn Du genau schaust ;-)...
25.08.2017 15:50:47
Michael
Herr M,
...siehst Du, dass ich Dir schneller geantwortet habe, als Deine Ungeduld vermutet hat. ;-)
AW: Tabellenblätter in neue Datei hart kopieren
21.08.2017 16:53:27
Robert
Hallo,
versuche mal folgenden Code
Sub TabellenKopieren()
Sheets(Array("Abflüsse", "Versand")).Copy
ActiveWorkbook.SaveAs Filename:= _
"D:\Test\NeuerName.xlsx", FileFormat:= _
xlOpenXMLWorkbook, CreateBackup:=False
ActiveWorkbook.Sheets(1).UsedRange = ActiveWorkbook.Sheets(1).UsedRange.Value
ActiveWorkbook.Sheets(2).UsedRange = ActiveWorkbook.Sheets(2).UsedRange.Value
End Sub

Gruß
Robert
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Tabellenblätter hart kopieren und in neue Datei speichern


Schritt-für-Schritt-Anleitung

Um ein Excel Tabellenblatt in eine neue Datei zu kopieren und dort zu speichern, kannst du den folgenden VBA-Code verwenden. Dieser Code kopiert die Daten der Tabellenblätter „Abflüsse“ und „Versand“ in eine neue Datei, wobei nur die Werte und das Format übernommen werden.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Klicke auf Einfügen und wähle Modul, um ein neues Modul zu erstellen.
  3. Füge den folgenden Code in das Modul ein:
Sub TabellenKopieren()
    Const PFAD$ = "U:\" ' Speicherpfad anpassen
    Const DNAME$ = "Test.xlsx" ' Dateiname anpassen
    Dim WbQ As Workbook: Set WbQ = ThisWorkbook
    Dim WbZ As Workbook

    Set WbZ = Workbooks.Add
    WbQ.Worksheets("Abflüsse").UsedRange.Copy
    WbZ.Worksheets(1).Range("A1").PasteSpecial xlPasteValues
    WbQ.Worksheets("Versand").UsedRange.Copy
    WbZ.Worksheets(2).Range("A1").PasteSpecial xlPasteValues
    WbZ.SaveAs PFAD & DNAME, xlWorkbookNormal
    WbZ.Close True
End Sub
  1. Passe den Speicherpfad PFAD$ und den Dateinamen DNAME$ an deine Bedürfnisse an.
  2. Schließe den VBA-Editor und führe das Makro aus, um die Tabellenblätter hart zu kopieren und in einer neuen Datei zu speichern.

Häufige Fehler und Lösungen

  • Fehler: "Die Datei kann nicht geöffnet werden."

    Wenn du diese Fehlermeldung erhältst, könnte es daran liegen, dass in den Original-Blättern Makros vorhanden sind. In diesem Fall solltest du nur die Zell-Werte kopieren, um Probleme mit dem Dateiformat zu vermeiden.

  • Lösung: Verwende die .PasteSpecial-Methode, um nur die Werte zu übertragen, wie im obigen Code gezeigt.


Alternative Methoden

  1. VBA für mehrere Tabellenblätter: Du kannst auch mehrere Tabellenblätter auf einmal kopieren, indem du die Sheets(Array(...)).Copy Methode verwendest. Beispiel:
Sub MehrereTabellenKopieren()
    Sheets(Array("Abflüsse", "Versand")).Copy
    ActiveWorkbook.SaveAs Filename:="D:\Test\NeuerName.xlsx", FileFormat:=xlOpenXMLWorkbook
End Sub
  1. Manuelles Kopieren: Wenn du es ohne VBA bevorzugst, kannst du die benötigten Blätter manuell kopieren und in eine neue Datei einfügen, indem du sie mit STRG + C und STRG + V kopierst.

Praktische Beispiele

  • Beispiel 1: Kopiere ein einzelnes Blatt in eine neue Datei:
Sub EinzelnKopieren()
    Sheets("Abflüsse").Copy
    ActiveWorkbook.SaveAs Filename:="D:\Test\Abflüsse.xlsx", FileFormat:=xlOpenXMLWorkbook
End Sub
  • Beispiel 2: Kopiere mehrere Blätter und speichere sie in einer neuen Datei:
Sub AlleBlätterKopieren()
    Sheets(Array("Abflüsse", "Versand")).Copy
    ActiveWorkbook.SaveAs Filename:="D:\Test\Blätter.xlsx", FileFormat:=xlOpenXMLWorkbook
End Sub

Tipps für Profis

  • Makrosicherheit: Achte darauf, dass die Makrosicherheit in Excel so eingestellt ist, dass das Ausführen von VBA-Codes erlaubt ist.
  • Fehlerbehandlung: Verwende On Error Resume Next, um Fehler zu ignorieren und den Code fortzusetzen, wenn du dir nicht sicher bist, ob eine Datei existiert oder nicht.
  • Automatisierung: Du kannst den Code in eine Schaltfläche in Excel einfügen, um die Ausführung zu erleichtern.

FAQ: Häufige Fragen

1. Frage
Wie kann ich mehrere Tabellenblätter in eine neue Datei kopieren?
Antwort: Du kannst die Sheets(Array(...)).Copy Methode verwenden, um mehrere Blätter gleichzeitig zu kopieren.

2. Frage
Warum bekomme ich eine Fehlermeldung beim Speichern?
Antwort: Überprüfe, ob in den Original-Blättern Makros gespeichert sind. Wenn ja, speichere die neue Datei im .xlsm Format, um die Makros zu erhalten.

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