Es kommt in der Makro Programmierung immer mal wieder vor, dass das Makro nicht in dem Excel Workbook läuft, mit dem der User arbeitet.
Zwei Beispiele:
1. Ich ‚öffne‘ eine Dokumentation in einem neuen Worksheet.
2. Speichern unter einem anderen Namen.
Man muss wissen, wie die verschiedenen geöffneten Tabellenblätter angesteuert werden. Für die Unterscheidung wichtig:
1 |
Thisworkbook.Name |
Ist das Workbook, in dem das Makro läuft.
1 |
Activeworkbook.Name |
Ist das Aktive Workbook.
Für die konkreten Beispiele:
Ich benutze für meinen Arbeitsalltag ein eigenes Addin, das die gängisten Makros enthält. In diesem befindet sich auch ein (verstecktes) Tabellenblatt „Doku“. Mittels Makrobutton erstellt das Makro ein neues Tabellenblatt und kopiert das Blatt „Doku“ in dieses.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Sub doku(control As IRibbonControl) On Error GoTo Fehler Application.ScreenUpdating = False Application.DisplayAlerts = False Workbooks.Add ThisWorkbook.Sheets("Doku").Copy Before:=ActiveWorkbook.Sheets(1) ActiveWorkbook.Sheets(4).Delete ActiveWorkbook.Sheets(3).Delete ActiveWorkbook.Sheets(2).Delete Fehler: Exit Sub End Sub |
Bemerkungen zum Code:
1 |
(control AS iRibbonControl) |
wird verwendet, wenn man mit einem eigenen Ribbon arbeitet. Das Makro wird dann über einen Makrobutton angesteuert.
1 2 |
On Error Go To Fehler Fehler: Exit Sub |
Normales Fehlerhandling. Falls etwas nicht klappt, bricht das Makro ab.
1 2 |
Application.Screenupdating = False Application.DisplayAlerts = False |
Mit der ersten Zeile wird die Bildschirmaktualisierung ausgeschaltet, das heisst erst wenn das Makro fertig ist, sieht man was wechselt. Hier zwar marginal, aber das beschleunigt rechenintensive Makros. Mit der zweiten Zeile unterdrückt man „Are You Sure“ Fragen…
1 2 |
Workbooks.Add ThisWorkbook.Sheets("Doku").Copy Before:=ActiveWorkbook.Sheets(1) |
Hier jetzt das eigentliche Thema: Zuerst wird ein neues Workbook hinzugefügt, dann Kopiere das Blatt „Doku“ aus ThisWorkbook (das Workbook wo das Makro läuft) zum ActiveWorkbook (das Workbook, das am Bildschirm eben erstellt wurde und deshalb aktiv ist).
1 2 3 |
ActiveWorkbook.Sheets(4).Delete ActiveWorkbook.Sheets(3).Delete ActiveWorkbook.Sheets(2).Delete |
Löscht die drei Tabellenblätter, die es ebenfalls im neuen Workbook hat. Sind leer und deshalb unnütz. Könnte man natürlich auch mit einer Schleife oder sonstwie löschen.
H