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

Sheets in neues Workbook kopieren

Forumthread: Sheets in neues Workbook kopieren

Sheets in neues Workbook kopieren
Mike
Hallo,
ich möchte aus einer Excel-Datei heraus eine neue Excel-Datei erstellen. Das klappt auch soweit, hier das Makro
Sub Datei_neu()
Dim intAbfrageWert As Integer
Dim strDateiName As String
intAbfrageWert = MsgBox(" Wollen Sie eine Datei in dem Pfad " & ActiveWorkbook.Path & "  _
erstellen?", _
vbYesNo + vbQuestion, "Datei erstellen", "", 0)
If intAbfrageWert = 6 Then
strDateiName = InputBox("Geben Sie einen Dateinamen ein", "Dateiname")
Workbooks.Add
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & strDateiName, _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
Else
MsgBox "Vorgang abgebrochen"
End If
End Sub
Nun möchte ich aber, aus jedem der Sheets der aktuellen Datei (bis auf das Erste) die Spalten, A,B,C,H in das neue
Workbook in die Spalten A,B,C,D einfügen.
Wie kann ich das machen? Wie kann ich aus dem aktuellen Workbook auf die Sheet-Attribute (wie Namen, Spalten) etc. des neuen Workbooks zugreifen zugreifen? Muss das Workbook dazu geöffnet sein?
Gruß!
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Sheets in neues Workbook kopieren
15.03.2012 14:04:38
Frank
Hallo Mike,
so sollte das gehen:
Sub Datei_neu()
Dim intAbfrageWert As Integer
Dim strDateiName As String
Dim strDateiOrig As String
Dim intAnzSheets As Integer
strDateiOrig = ActiveWorkbook.Name
intAbfrageWert = MsgBox(" Wollen Sie eine Datei in dem Pfad " & ActiveWorkbook.Path & " _
erstellen?", _
vbYesNo + vbQuestion, "Datei erstellen", "", 0)
If intAbfrageWert = 6 Then
strDateiName = InputBox("Geben Sie einen Dateinamen ein", "Dateiname")
Workbooks.Add
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & strDateiName, _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
intAnzSheets = ActiveWorkbook.Worksheets.Count
strDateiName = ActiveWorkbook.Name
Workbooks(strDateiName).Activate
Application.DisplayAlerts = False
For i = intAnzSheets To 2 Step -1
Workbooks(strDateiName).Worksheets(i).Delete
Next
Application.DisplayAlerts = True
Workbooks(strDateiOrig).Activate
intAnzSheets = ActiveWorkbook.Worksheets.Count
For i = intAnzSheets To 2 Step -1
Sheets(Array(i)).Copy After:=Workbooks(strDateiName). _
Sheets(1)
Next
Else
MsgBox "Vorgang abgebrochen"
Exit Sub
End If
Workbooks(strDateiName).Activate
intAnzSheets = ActiveWorkbook.Worksheets.Count
For i = 2 To intAnzSheets
ActiveWorkbook.Sheets(i).Activate
Columns("D:G").Select
Selection.Delete Shift:=xlToLeft
Next
Application.DisplayAlerts = False
Workbooks(strDateiName).Worksheets(1).Delete
Application.DisplayAlerts = True
End Sub

Gruß
Frank
Anzeige
AW: Sheets in neues Workbook kopieren
15.03.2012 14:21:28
Mike
Puh!
Ich bin baff!
Vielen Dank! Das rennt wie eine 1. Danke Dir Frank!
Aber was bedeutet Sheets(Array(i)).Copy After:=Workbooks(strDateiName).Sheets(1)
ein Array hast Du doch gar nicht definiert?
Gruß!
AW: Sheets in neues Workbook kopieren
15.03.2012 14:39:36
Frank
Hallo Mike,
der Array war in der Tat unnötig. Das habe ich aus einem anderen Makro von mir geklaut, in dem mehrere Sheets kopiert werden, die in Anzahl und Name immer gleich sind.
Original:
Sheets(Array("Source", "Summary")).Copy After:=Workbooks(FSM). _
Sheets(1)
So müsste es auch gehen, habe ich jetzt aber nicht getestet:
Sheets(i).Copy After:=Workbooks(strDateiName). _
Sheets(1)
Gruß
Frank
Anzeige
AW: Sheets in neues Workbook kopieren
15.03.2012 15:34:31
Mike
Geht auch so!
Wunderbar, Vielen Dank!
;
Anzeige
Anzeige

Infobox / Tutorial

Sheets in neues Workbook kopieren


Schritt-für-Schritt-Anleitung

Um aus einem bestehenden Excel-Workbook ein neues Workbook zu erstellen und spezifische Sheets zu kopieren, kannst Du folgendes VBA-Skript verwenden:

Sub Datei_neu()
    Dim intAbfrageWert As Integer
    Dim strDateiName As String
    Dim strDateiOrig As String
    Dim intAnzSheets As Integer

    strDateiOrig = ActiveWorkbook.Name
    intAbfrageWert = MsgBox(" Wollen Sie eine Datei in dem Pfad " & ActiveWorkbook.Path & " erstellen?", vbYesNo + vbQuestion, "Datei erstellen", "", 0)

    If intAbfrageWert = 6 Then
        strDateiName = InputBox("Geben Sie einen Dateinamen ein", "Dateiname")
        Workbooks.Add
        ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & strDateiName, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False

        intAnzSheets = ActiveWorkbook.Worksheets.Count
        Workbooks(strDateiName).Activate
        Application.DisplayAlerts = False

        For i = intAnzSheets To 2 Step -1
            Workbooks(strDateiName).Worksheets(i).Delete
        Next

        Application.DisplayAlerts = True
        Workbooks(strDateiOrig).Activate
        intAnzSheets = ActiveWorkbook.Worksheets.Count

        For i = intAnzSheets To 2 Step -1
            Sheets(i).Copy After:=Workbooks(strDateiName).Sheets(1)
        Next

        ActiveWorkbook.Sheets(1).Delete ' Löscht das erste leere Sheet im neuen Workbook

        ' Spalten D:G entfernen
        For i = 2 To intAnzSheets
            ActiveWorkbook.Sheets(i).Activate
            Columns("D:G").Select
            Selection.Delete Shift:=xlToLeft
        Next
    Else
        MsgBox "Vorgang abgebrochen"
        Exit Sub
    End If
End Sub

Mit diesem Skript kannst Du ein neues Workbook erstellen und die gewünschten Sheets kopieren. Achte darauf, dass das Workbook, aus dem Du kopierst, geöffnet ist.


Häufige Fehler und Lösungen

Fehler: "Vorgang abgebrochen" nach Bestätigung der MsgBox.
Lösung: Stelle sicher, dass Du im richtigen Workbook arbeitest und genügend Berechtigungen zum Erstellen eines neuen Workbooks hast.

Fehler: Das neue Workbook enthält mehr Sheets als gewünscht.
Lösung: Überprüfe die Schleife, die die Sheets löscht. Achte darauf, dass die Indizes korrekt sind und dass Du das erste Sheet nur dann löscht, wenn es leer ist.


Alternative Methoden

Eine alternative Methode, um mehrere Sheets zu kopieren, ist die Verwendung eines Arrays:

Sheets(Array("Sheet1", "Sheet2")).Copy After:=Workbooks(strDateiName).Sheets(1)

Dies ermöglicht Dir, gezielt bestimmte Sheets zu kopieren. Achte darauf, dass die Namen der Sheets im Array genau mit denen im Workbook übereinstimmen.


Praktische Beispiele

Hier ist ein einfaches Beispiel, um ein Workbook zu erstellen und nur die ersten drei Sheets zu kopieren:

Sub CopyFirstThreeSheets()
    Dim newWorkbook As Workbook
    Set newWorkbook = Workbooks.Add
    ThisWorkbook.Sheets("Sheet1").Copy Before:=newWorkbook.Sheets(1)
    ThisWorkbook.Sheets("Sheet2").Copy After:=newWorkbook.Sheets(1)
    ThisWorkbook.Sheets("Sheet3").Copy After:=newWorkbook.Sheets(2)
End Sub

Mit diesem Code werden die ersten drei Sheets in das neue Workbook kopiert.


Tipps für Profis

  • Verwende Option Explicit am Anfang Deines VBA-Codes, um sicherzustellen, dass alle Variablen deklariert sind.
  • Nutze Application.ScreenUpdating = False, um das Flackern des Bildschirms zu vermeiden, während das Makro läuft.
  • Wenn Du regelmäßig mit VBA arbeitest, erstelle eine Sammlung von nützlichen Makros, die Du häufig verwendest, um Zeit zu sparen.

FAQ: Häufige Fragen

1. Muss das Workbook geöffnet sein, um Sheets zu kopieren?
Ja, das Workbook, aus dem Du die Sheets kopierst, muss geöffnet sein, damit Du auf die Sheet-Attribute zugreifen kannst.

2. Wie lösche ich ein leeres Sheet im neuen Workbook?
Du kannst das erste Sheet mit ActiveWorkbook.Sheets(1).Delete löschen, nachdem Du die gewünschten Sheets kopiert hast.

3. Kann ich die Spalten, die ich kopiere, anpassen?
Ja, Du kannst die Spalten, die Du kopieren möchtest, anpassen, indem Du den Code entsprechend änderst, z.B. Columns("A:C,H").Copy.

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