Kopieren von Arbeitsblättern in einem Makro (Microsoft Excel)
Beim Organisieren von Daten in Arbeitsmappen ist es nicht ungewöhnlich, Arbeitsblätter von einer Arbeitsmappe in eine andere zu kopieren. In der Tat ist der Befehl „Blatt verschieben oder kopieren“ (sichtbar, wenn Sie mit der rechten Maustaste auf eine Arbeitsblattregisterkarte klicken) einer, den ich ziemlich oft verwende, und ich würde wetten, dass andere ihn genauso oft verwenden.
Wie kann man dann Arbeitsblätter innerhalb eines Makros kopieren? Die Antwort besteht darin, die Kopiermethode mit einem einzelnen Arbeitsblatt oder einer Gruppe von Arbeitsblättern zu verwenden.
Der folgende Makrocode kopiert beispielsweise das aktuell ausgewählte Arbeitsblatt in eine neue Arbeitsmappe:
ActiveSheet.Copy
Das ist es; Eine einzige Zeile reicht aus, um das Arbeitsblatt in eine neue, unbenannte Arbeitsmappe zu kopieren. Nach dem Ausführen der Zeile wird die neue Arbeitsmappe ausgewählt, und Sie können sie mit dem folgenden Code speichern. Die erste Zeile im Code speichert die Arbeitsmappe und die zweite schließt sie.
ActiveWorkbook.SaveAs Filename:="MyNewFile.xlsm", _ FileFormat:=xlOpenXMLWorkbookMacroEnabled ActiveWindow.Close
Wenn Sie ein bestimmtes Blatt in eine andere Arbeitsmappe kopieren möchten, geben Sie dazu den Namen des zu kopierenden Blattes an, anstatt das ActiveSheet-Objekt zu verwenden:
Sheets("Sheet1").Copy
In diesem Beispiel wird das Arbeitsblatt mit dem Namen Sheet1 aus der Sheets-Auflistung in eine neue Arbeitsmappe kopiert. Sie können dann die neue Arbeitsmappe wie bereits beschrieben speichern.
Die Kopiermethode ist bei Verwendung mit Arbeitsblättern nicht auf das Kopieren eines einzelnen Blattes beschränkt. Wenn Sie eine Gruppe von Arbeitsblättern ausgewählt haben, können Sie weiterhin eine einzige Befehlszeile verwenden, um alle in eine neue Arbeitsmappe zu kopieren.
Das wird in diesem Makro gemacht:
Sub CopyWorkbook() Dim sCopyName As String sCopyName = "My New Workbook.xlsm" SelectedSheets.Copy ActiveWorkbook.SaveAs Filename:=sCopyName, _ FileFormat:=xlOpenXMLWorkbookMacroEnabled End Sub
Beachten Sie die Verwendung des Befehls Kopieren. Das Makro funktioniert unabhängig davon, ob Sie ein Arbeitsblatt ausgewählt haben oder fünfzig. es spielt keine Rolle. Wenn Sie alle Arbeitsblätter von einer Arbeitsmappe in eine andere kopieren möchten, müssen Sie nur eine einzige Änderung im Makro in der Zeile vornehmen, in der die Kopiermethode aufgerufen wird:
Sheets.Copy
Dadurch wird die gesamte Sheets-Sammlung kopiert, die aus allen Arbeitsblättern in der Arbeitsmappe besteht.
Es ist zu beachten, dass die Kopiermethode nicht nur zum Kopieren von Arbeitsblättern in eine neue Arbeitsmappe dient. Es kann auch zum Kopieren von Arbeitsblättern innerhalb derselben Arbeitsmappe verwendet werden. Sie müssen lediglich angeben, wo in der aktuellen Arbeitsmappe die Kopie erstellt werden soll:
ActiveSheet.Copy After:=Sheets("Sheet7")
Diese Codezeile kopiert das aktive Arbeitsblatt in dieselbe Arbeitsmappe, sodass es nach dem Arbeitsblatt mit dem Namen Sheet7 angezeigt wird. Wenn es für Ihre Anforderungen besser geeignet ist, können Sie stattdessen das Arbeitsblatt angeben, vor dem die Kopie platziert werden soll:
ActiveSheet.Copy Before:=Sheets("Sheet7")
Dies führt dazu, dass das Arbeitsblatt vor und nicht nach Sheet7 platziert wird.
_Hinweis: _
Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.
ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.
Dieser Tipp (11856) gilt für Microsoft Excel 2007, 2010, 2013, 2016, 2019 und Excel in Office 365. Eine Version dieses Tippes für die ältere Menüoberfläche von Excel finden Sie hier: