Automatisches Kopieren von Arbeitsblattcode (Microsoft Excel)
Tim merkt korrekt an, dass ein Benutzer mit der rechten Maustaste auf eine Arbeitsblattregisterkarte klicken und dann Code anzeigen auswählen kann, um ein VBA-Codeblatt für das Arbeitsblatt zu öffnen. Er hat Code geschrieben, der Zellen, Spalten und Zeilen automatisch bearbeitet. Dieser Code muss auf jedem Arbeitsblatt in einer Arbeitsmappe verfügbar sein, auch wenn der Benutzer neue Arbeitsblätter hinzufügt. Tim fragt sich, ob es mit VBA eine Möglichkeit gibt, den Code eines Arbeitsblatts automatisch in ein neues Arbeitsblatt in der Arbeitsmappe zu kopieren.
Es gibt verschiedene Möglichkeiten, wie Sie dieses Problem angehen können. Eine Möglichkeit – und vielleicht die einfachste – besteht darin, die Makros aus dem Codeblatt des Arbeitsblatts zu entfernen und sie in das ThisWorkbook-Modul zu verschieben. Das Codeblatt des Arbeitsblatts wird angezeigt, wenn Sie mit der rechten Maustaste auf eine Arbeitsblattregisterkarte klicken. Der Code in diesem Blatt soll Ereignisse behandeln, die im Arbeitsblatt und nur in diesem Arbeitsblatt auftreten. Wenn Sie den Code in das ThisWorkbook-Modul verschieben, können Ereignisse weiterhin verarbeitet werden. Diese Ereignisse gelten jedoch für alle Arbeitsblätter in der Arbeitsmappe.
Wenn Sie beispielsweise mit der rechten Maustaste auf eine Arbeitsblattregisterkarte klicken und das Codefenster anzeigen, arbeiten Sie zunächst im Ereignis Worksheet_SelectionChange. Wenn Sie diesen Code in das ThisWorkbook-Modul verschieben möchten, können Sie ihn im Workbook_SheetSelectionChange-Ereignis platzieren.
Wenn eine solche „Ebenenänderung“ Ihres Codes aus irgendeinem Grund nicht funktioniert, besteht ein anderer Ansatz darin, ein Vorlagenarbeitsblatt in der Arbeitsmappe zu erstellen.
Geben Sie ihm einen Namen wie „MyMaster“ und stellen Sie sicher, dass er den gesamten Code enthält, den Sie Ihren neu erstellten Arbeitsblättern hinzufügen möchten. Falls gewünscht, können Sie dieses Arbeitsblatt sogar ausblenden, damit die Benutzer nicht abgelenkt werden. Fügen Sie dann das folgende Makro in das ThisWorkbook-Modul ein:
Private Sub Workbook_NewSheet(ByVal Sh As Object) Dim tmpName As String tmpName = Sh.Name Sheets("MyMaster").Copy Before:=Sheets(Sh.Name) Application.DisplayAlerts = False Sheets(Sh.Name).Delete Application.DisplayAlerts = True Sheets("MyMaster (2)").Name = tmpName End Sub
Dieser Code wird jedes Mal ausgelöst, wenn der Arbeitsmappe ein neues Arbeitsblatt hinzugefügt wird. Es sieht sich den Namen des neu hinzugefügten Arbeitsblatts an (das so etwas wie „Sheet4“ sein wird) und speichert diesen Namen in einer temporären Variablen.
Der Code kopiert dann das MyMaster-Arbeitsblatt in die Arbeitsmappe (die auch die Makros im Arbeitsblatt kopiert), löscht das ursprünglich erstellte Arbeitsblatt und benennt die neue MyMaster-Kopie so um, dass sie denselben Namen wie das ursprüngliche Arbeitsblatt hat.
_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 (7884) gilt für Microsoft Excel 2007, 2010, 2013, 2016, 2019 und Excel in Office 365. Eine Version dieses Tipps für die ältere Menüoberfläche von Excel finden Sie hier: