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 = #1/1/2020#     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. Januar 2020 liegt, der Hauptteil des Makros ausgeführt wird. Wenn es der 1. Januar 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 >= #1/1/2020# 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. Januar 2020 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 zunächst nie 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 (12812) 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: