Selbstlöschende Makros (Microsoft Excel)
Patrick schreibt ein Makro und möchte, dass sich das Makro nach Erreichen eines bestimmten Ablaufdatums selbst löscht. Es gibt verschiedene Möglichkeiten, wie diese Aufgabe angegangen werden kann. Erstens könnten Sie ein Makro, das nur vor einem bestimmten Datum funktioniert, folgendermaßen schreiben:
Sub MyMacro() ExpirationDate = #6/1/2013# If Now() < ExpirationDate Then 'Rest of macro goes here End if End Sub
Die Idee ist, dass, wenn (in diesem Fall) das aktuelle Datum vor dem 1. Juni 2013 liegt, der Hauptteil des Makros ausgeführt wird. Wenn es der 1. Juni oder später ist, wird das Makro nicht ausgeführt. Dieser Ansatz löscht das Makro natürlich nicht wirklich. Es wird lediglich überprüft, ob das Makro vor einem bestimmten Datum ausgeführt wird.
Um den Makrocode tatsächlich loszuwerden, müssen Sie einen anderen Ansatz wählen:
Private Sub Workbook_Open() Dim VBComp As VBIDE.VBComponent Dim VBComps As VBIDE.VBComponents 'Delete if Past Date If Date >= #6/1/2013# Then Set VBComps = ActiveWorkbook.VBProject.VBComponents For Each VBComp In VBComps Select Case VBComp.Type Case vbext_ct_StdModule, vbext_ct_MSForm, _ vbext_ct_ClassModule VBComps.Remove VBComp Case Else With VBComp.CodeModule .DeleteLines 1, .CountOfLines End With End Select Next VBComp End If Set VBComps = Nothing Set VBComp = Nothing End Sub
Dieser Code wurde aus einem Makro übernommen, das ursprünglich von Chip Pearson geschrieben wurde und auf seiner Website unter der folgenden Adresse verfügbar ist:
http://www.cpearson.com/excel/vbe.aspx
Damit das Makro funktioniert, müssen Sie sicherstellen, dass ein Verweis auf Microsoft Visual Basic für die Erweiterbarkeit von Anwendungen vorhanden ist. (Wählen Sie dazu im VB-Editor Extras | Referenzen und anschließend in den verfügbaren Referenzen Microsoft Visual Basic für Anwendungserweiterbarkeit.)
Das Makro wird ausgeführt, wenn die Arbeitsmappe geöffnet wird. Wenn das Datum größer oder gleich dem 1. Juni 2013 ist, wird jede Komponente des VBProject gelöscht. Dies bedeutet, dass das Makro sehr leistungsfähig ist, da es alles löscht, nicht nur eine einzelne Prozedur oder ein einzelnes Modul.
Bei diesem Makro sind natürlich einige Dinge zu beachten.
Wenn der Benutzer beim Öffnen der Arbeitsmappe keine Makros aktiviert, wird dieser Code niemals ausgeführt und das Makro wird nicht gelöscht.
Zweitens führt das Löschen von Makros auf diese Weise offensichtlich zu Änderungen an der Arbeitsmappe. Das heißt, wenn die Arbeitsmappe geschlossen wird, wird der Benutzer gefragt, ob er seine Änderungen speichern möchte. Wenn dies nicht der Fall ist, werden die Löschvorgänge nicht gespeichert und das Makro wird beim nächsten Öffnen der Arbeitsmappe erneut ausgeführt.
_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 (3123) gilt für Microsoft Excel 97, 2000, 2002 und 2003. Eine Version dieses Tipps für die Multifunktionsleistenschnittstelle von Excel (Excel 2007 und höher) finden Sie hier: