Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Mehrere Tabellenblätter in neue Datei verschieben

Mehrere Tabellenblätter in neue Datei verschieben
28.03.2019 21:27:42
Richard
Liebe Forumsmitglieder,
ich versuche unten beschriebene Aufgabe zu lösen. Eigentlich dachte ich, ganz einfach. Alles irgendwie schon mal gemacht. Für jeden Teilschritt habe ich Lösungen, die für sich funktionieren. Aber die Kombination der Teilschritte bekomme ich nicht in den Griff. Dabei habe ich verschiedene Varianten ausprobiert. Es kommen bei jeder Variante Fehler, die ich nicht verstehe.
Ich habe eine Datei (wkbQuelle) mit vielen Auswertungen = Tabellenblättern. Eine Auswahl dieser Auswertungen (zunächst 4 Tabellenblätter; wksTemp) möchte ich zusammen in einer neuen Datei (wkbZiel) zusammenfassen (und per Email verteilen).
Dabei sollen nur die Formate und die Werte übernommen werden, da ich in der verteilten Datei keine untereinander verknüpften Excel-Dateien auf dem Server haben möchte. Die Namen der Tabellenblätter sollen übernommen werden.
In diversen Anläufen habe ich entweder verschiedene Laufzeitfehler erhalten oder, bestes Ergebnis, 4 Dateien mit jeweils einem der Arbeitsblätter.
Schließlich war meine Idee über .UsedRange und .Range die Daten in die neue Tabelle zu verschieben. Aber ich erhalte wieder einen Laufzeitfehler 1004, weil die „PasteSpecial-Methode des Range-Objektes nicht ausgeführt werden“ konnte. Bitte?
Wenn ich zu Testzwecken diese Zeile entferne, bekomme ich bei der Kopie des Namens einen Laufzeitfehler, weil Excel „nicht einem Blatt den gleichen Namen geben wie einem anderen Blatt“ kann, „auf die Visual-Basic Bezug nimmt.“ Aber diese Vorgehensweise habe ich für das Verschieben von EINEM Tabellenblatt in eine neue Datei funktionsfähig gesehen!? Und warum sollten in zwei Dateien die Tabellenblätter nicht gleiche Namen haben dürfen?
Wenn ich wieder zu Testzwecken auch diese Zeile entferne, läuft das Makro sauber durch! Hurra, ohne Fehlermeldung!
Leider habe ich dann eine Datei mit korrektem Dateinamen im richtigen Ordner und wie gewünscht mit vier Arbeitsblättern, in der aber jedes Tabellenblatt komplett leer ist. Also auch das Verschieben der UsedRange funktioniert in meinem Skript nicht richtig.
Ich weiß nicht, was ich falsch mache bzw. wo meine Wissenslücke ist. Kann mir jemand bitte helfen, diese Lücke zu schließen?
Vielen Dank im Voraus.
Hier mein (aktuelles) Skript: (Die meisten Variablen habe ich Global definiert, da ich sie in verschiednen Makros brauche, daher hier kaum Dim. Nur falls es nicht eindeutig sein sollte: wksTemp as Worksheet; wkbZiel As Workbook; wkbQuelle As Workbook)
Sub Marketingsreports_erstellen()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Application.StatusBar = "Verarbeitung läuft. Bitte warten."
Dim i As Integer
'# Vorbereitungen
Call Arbeitsmappe_vorbereiten  'Hier wird der Dateipfad ausgelesen und geprüft, ob benötigte  _
Dateiordner existieren
Call Variablen_auslesen 'hier werden u.a. Stichtage aus dem Datenimport ausgelesen
' Dateinamen und Pfad festlegen
strDateiN = strPfad & "\Auswertungen Marketing\" & strJahr & "_" & strMonat & " " & " _
Marketingauswertung" & ".xlsx"
Set wkbQuelle = ThisWorkbook
'# Neues Workbook anlegen
lngAnzahlTab = Application.SheetsInNewWorkbook  ' Auslesen der Standardanzahl Register Excel
Application.SheetsInNewWorkbook = 4
Set wkbZiel = Workbooks.Add                 ' Neue Arbeitsmappe anlegen
wkbZiel.SaveAs Filename:=strDateiN
'# Tabellen kopieren
i = 1
For Each wksTemp In wkbQuelle.Worksheets(Array("Markenlinien Marketing", _
"Cluster Marketing", "Artikel Marketing", "Trend Marketing"))
Set wksTemp = ActiveSheet
wksTemp.UsedRange.Copy Destination:=wkbZiel.Sheets(i).Range("A1")
wkbZiel.Sheets(i).Range("A1").PasteSpecial xlPasteValues
wkbZiel.Sheets(i).Range("A1").PasteSpecial xlPasteFormats
wkbZiel.Sheets(i).Name = wksTemp.Name
i = i + 1
Next wksTemp
wkbZiel.Close savechanges:=True
'# Zurücksetzen
Set wkbZiel = Nothing
Set wksTemp = Nothing
Application.CutCopyMode = False
Application.SheetsInNewWorkbook = lngAnzahlTab  ' Standardanzahl Register zurücksetzen
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.StatusBar = False
End Sub

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mehrere Tabellenblätter in neue Datei verschieben
28.03.2019 22:01:23
cysu11
Hi Richard,
probiere mal das:
Sub BlaetterAlsNeueDateiPerMail()
Dim ws As Worksheet
Pfad = "C:\Testordner\"
NeueDatei = "NeueMappe.xlsx"
Worksheets(Array("Tabelle2", "Tabelle3", "Tabelle4", "Tabelle5")).Copy
ActiveWorkbook.SaveAs Pfad & NeueDatei
End Sub
LG
Alexandra
Anzeige
AW: Mehrere Tabellenblätter in neue Datei verschieben
28.03.2019 22:22:52
cysu11
Hi Richard,
mein Code von vorhin, übernimmt (zumindest bei mir Excel 2019) kein Verknüpfungen in der neuen Datei, sondern nurn die Formeln 1:1.
Aber wenn du tatsächlich nur die Werte & Formate in der neuen Datei haben willst, dann so:
Sub BlaetterAlsNeueDatei()
Dim wsh As Worksheet
Pfad = "C:\Testordner\"
NeueDatei = "NeueMappe.xlsx"
Worksheets(Array("Tabelle2", "Tabelle3", "Tabelle4", "Tabelle5")).Copy
ActiveWorkbook.SaveAs Pfad & NeueDatei
Set nd = ActiveWorkbook
For Each wsh In nd.Worksheets
wsh.Activate
wsh.Cells.Copy
wsh.Cells.PasteSpecial xlPasteValues
Application.CutCopyMode = False
Range("A1").Select
Next
nd.Save
End Sub
LG
Alexandra
Anzeige
AW: Mehrere Tabellenblätter in neue Datei
28.03.2019 22:56:31
Richard
Hallo Alexandra,
die zweite Variante ist die von mir gesuchte. Funktioniert genauso, wie ich mir das vorgestellt habe.
Super!
Vielen Dank für Deine Hilfe. Vielen Dank für die tolle Geschwindigkeit!
Beste Grüße
Frank
;

Forumthreads zu verwandten Themen

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

Mehrere Tabellenblätter in eine neue Excel-Datei verschieben


Schritt-für-Schritt-Anleitung

Um mehrere Tabellenblätter aus einer Excel-Datei in eine neue Datei zu verschieben, kannst Du folgendes VBA-Skript verwenden. Dieses Skript kopiert die gewünschten Arbeitsblätter und speichert sie in einer neuen Datei, ohne Verknüpfungen zu übernehmen.

  1. Öffne die Excel-Datei, die die Tabellenblätter enthält.
  2. Drücke ALT + F11, um den VBA-Editor zu öffnen.
  3. Füge ein neues Modul hinzu (Einfügen > Modul).
  4. Kopiere den folgenden Code in das Modul:
Sub TabellenblaetterInNeueDatei()
    Dim wkbQuelle As Workbook
    Dim wkbZiel As Workbook
    Dim wksTemp As Worksheet
    Dim strDateiN As String
    Dim i As Integer

    Set wkbQuelle = ThisWorkbook
    strDateiN = "C:\DeinPfad\NeueDatei.xlsx" ' Ändere den Pfad und Dateinamen nach Bedarf

    Set wkbZiel = Workbooks.Add
    i = 1

    For Each wksTemp In wkbQuelle.Worksheets(Array("Tabelle1", "Tabelle2", "Tabelle3"))
        wksTemp.UsedRange.Copy
        wkbZiel.Sheets(i).Range("A1").PasteSpecial xlPasteValues
        wkbZiel.Sheets(i).Range("A1").PasteSpecial xlPasteFormats
        wkbZiel.Sheets(i).Name = wksTemp.Name
        i = i + 1
    Next wksTemp

    wkbZiel.SaveAs Filename:=strDateiN
    wkbZiel.Close
End Sub
  1. Passe den Pfad und die Namen der Tabellenblätter in der For Each-Schleife an.
  2. Führe das Skript aus (F5 oder über Run > Run Sub/UserForm).

Häufige Fehler und Lösungen

  • Laufzeitfehler 1004: Dieser Fehler tritt häufig auf, wenn Du versuchst, die PasteSpecial-Methode auf einen nicht kopierten Bereich anzuwenden. Stelle sicher, dass die Copy-Methode vor PasteSpecial korrekt angewendet wird.

  • "Blatt hat einen gleichen Namen": Wenn Du versuchst, ein Tabellenblatt mit einem Namen zu benennen, der bereits in der neuen Datei existiert, wird dieser Fehler angezeigt. Achte darauf, dass die Namen der Tabellenblätter eindeutig sind.

  • Leere Arbeitsblätter: Wenn Deine Arbeitsblätter leer sind, überprüfe, ob die UsedRange tatsächlich Daten enthält und ob das Kopieren korrekt funktioniert.


Alternative Methoden

Wenn Du die Tabellenblätter nicht über VBA kopieren möchtest, kannst Du auch die folgenden Methoden ausprobieren:

  1. Manuelles Kopieren: Du kannst die gewünschten Arbeitsblätter manuell auswählen, mit Strg + C kopieren und in eine neue Arbeitsmappe mit Strg + V einfügen. Achte darauf, dass Du nur die Werte und Formate ohne Verknüpfungen kopierst.

  2. Excel-Funktionen: Verwende die Funktion Kopieren und Einfügen in Excel, um die Daten zu verschieben. Wähle die gewünschten Zellen aus, kopiere sie, öffne eine neue Datei und füge sie dort ein.


Praktische Beispiele

Hier sind einige Beispiele, wie Du mehrere Tabellenblätter in eine neue Datei kopieren kannst:

  1. Kopieren von Marketing-Daten:

    Sub KopiereMarketingDaten()
       Worksheets(Array("Marketing1", "Marketing2")).Copy
       ActiveWorkbook.SaveAs "C:\DeinPfad\MarketingDaten.xlsx"
    End Sub
  2. Zusammenfassen von Verkaufsdaten in einer neuen Datei:

    Sub VerkaufsdatenZusammenfassen()
       Dim wkbNeu As Workbook
       Set wkbNeu = Workbooks.Add
       Worksheets(Array("Verkauf1", "Verkauf2", "Verkauf3")).Copy Before:=wkbNeu.Sheets(1)
       wkbNeu.SaveAs "C:\DeinPfad\Verkaufsdaten.xlsx"
    End Sub

Tipps für Profis

  • Code optimieren: Reduziere die Anzahl der Zeilen, in denen Du das Clipboard verwendest, um die Ausführungsgeschwindigkeit zu verbessern.

  • Fehlerbehandlung einfügen: Implementiere On Error Resume Next, um Fehler abzufangen und zu behandeln, ohne dass das Makro abbricht.

  • VBA-Funktionen verwenden: Nutze Funktionen wie Application.ScreenUpdating = False, um das Flackern des Bildschirms während der Ausführung zu vermeiden.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass keine Verknüpfungen in der neuen Datei vorhanden sind? Verwende PasteSpecial xlPasteValues und PasteSpecial xlPasteFormats, um nur die Werte und Formate zu kopieren.

2. Kann ich mehrere Tabellenblätter in ein einziges Tabellenblatt kopieren? Ja, Du kannst die Daten aus mehreren Tabellenblättern in ein einziges Blatt übertragen, indem Du die Zellen nacheinander kopierst und untereinander einfügst.

3. Was mache ich, wenn ich zu viele Tabellenblätter habe? Wenn Du zu viele Tabellenblätter hast, die Du verschieben möchtest, kannst Du die Auswahl in der For Each-Schleife dynamisch gestalten, indem Du sie aus einer Liste ziehst.

4. Ist dieses Skript mit allen Excel-Versionen kompatibel? Das Skript sollte in den meisten modernen Versionen von Excel funktionieren, einschließlich Excel 2016 und Excel 2019.

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