Wenn Sie ein Makro entwickeln, das andere verwenden können, möchten Sie möglicherweise eine Methode hinzufügen, mit der der Benutzer Ihr Makro beenden kann, bevor es endet, und dennoch die Kontrolle über die Funktionsweise des Makros behalten. Strg + Umbruch stoppt ein Makro, wird jedoch nicht ordnungsgemäß beendet, da der Benutzer den Code im VBA-Editor anzeigen kann.

Es gibt verschiedene Möglichkeiten, wie Sie dieses Problem angehen können. Die erste besteht darin, eine Eingabeaufforderung „Möchten Sie beenden“ in Ihr Makro einzubauen und das Makro die Eingabeaufforderung dann regelmäßig anzeigen zu lassen. Betrachten Sie beispielsweise den folgenden Code:

Do ...



'    your code goes here

Counter = Counter + 1     If Counter Mod 25 = 0 Then         If MsgBox("Stop Macro?", vbYesNo) = vbYes Then End     End If Loop

Die Makrokonstruktion basiert auf der Prämisse, dass Sie eine Reihe von Schritten haben, die Sie mithilfe einer Do …​ Loop-Struktur immer wieder wiederholen möchten. Jedes Mal, wenn die Schleife durchlaufen wird, wird der Wert des Zählers erhöht. Alle 25 Male durch die Schleife das „Stop-Makro?“ Die Eingabeaufforderung wird angezeigt, und der Benutzer hat die Möglichkeit, das Programm zu beenden.

Dieser Ansatz ist einfach zu implementieren und kann für einige Zwecke recht gut funktionieren. Der größte Nachteil dieses Ansatzes besteht jedoch darin, dass keine Unmittelbarkeit zulässig ist. Der Benutzer muss warten, bis das Makro beendet ist, bis mindestens 25 Iterationen aufgetreten sind.

Ein anderer Ansatz besteht darin, den VBA-Code zu „verbergen“ und ihm ein Kennwort zuzuweisen.

Führen Sie dazu die folgenden Schritte im VBA-Editor aus:

  1. Wählen Sie im Menü Extras die Option VBAProject Properties. Der Editor zeigt das Dialogfeld Projekteigenschaften an.

  2. Stellen Sie sicher, dass die Registerkarte Schutz angezeigt wird. (Siehe Abbildung 1.)

  3. Aktivieren Sie das Kontrollkästchen Projekt für Anzeige sperren.

  4. Geben Sie im Feld Kennwort ein Kennwort ein, das zum Schutz des Makros verwendet werden soll.

  5. Geben Sie im Feld Kennwort bestätigen ein zweites Mal dasselbe Kennwort ein.

  6. OK klicken.

Schließen Sie den VBA-Editor und speichern Sie die Arbeitsmappe. Wenn das VBA-Projekt geschützt ist, kann der Benutzer weiterhin auf Strg + Unterbrechung klicken, um das Makro zu stoppen, kann jedoch nicht zum eigentlichen Programmcode gelangen. Sie können nur über die Schaltflächen Weiter oder Beenden wählen, die beide Ihren Code schützen. Als zusätzlichen Vorteil hindert dieser Ansatz den Benutzer auch daran, Ihren Code mithilfe von Menü-, Symbolleisten- oder Multifunktionsleistenoptionen anzuzeigen.

Der vielleicht beste Ansatz ist jedoch, einen Fehlerbehandler zu erstellen, der im Wesentlichen die Verantwortung übernimmt, wenn der Benutzer Esc oder Strg + Pause drückt. Der ausgeführte Handler kann den Benutzer dann fragen, ob er wirklich beenden möchte, und dann ordnungsgemäß herunterfahren, wenn er dies tut. Hier ist ein Beispielcode, der zeigt, wie dies gemacht wird:

Sub Looptest()

Application.EnableCancelKey = xlErrorHandler     On Error GoTo ErrHandler

Dim x As Long     Dim y As Long     Dim lContinue As Long

y = 100000000     For x = 1 To y Step 1     Next

Application.EnableCancelKey = xlInterrupt     Exit Sub

ErrHandler:

If Err.Number = 18 Then         lContinue = MsgBox(prompt:=Format(x / y, "0.0%") & _           " complete" & vbCrLf & _           "Do you want to Continue (YES)?" & vbCrLf & _           "Do you want to QUIT? [Click NO]", _           Buttons:=vbYesNo)

If lContinue = vbYes Then             Resume         Else             Application.EnableCancelKey = xlInterrupt             MsgBox ("Program ended at your request")

Exit Sub         End If     End If

Application.EnableCancelKey = xlInterrupt End Sub

Beachten Sie, dass in diesem Beispiel die EnableCancelKey-Methode verwendet wird, die den Namen der Bezeichnung zuweist, zu der gesprungen werden soll, wenn die Abbruchtaste (Esc oder Strg + Pause) gedrückt wird. In diesem Fall wird ErrHandler aufgerufen und der Benutzer wird gefragt, was zu tun ist. Wenn der Benutzer das Beenden wählt, wird das Makro ordnungsgemäß heruntergefahren.

Beachten Sie, dass nach dem ErrHandler-Label zunächst überprüft werden muss, ob die Number-Eigenschaft des Err-Objekts gleich 18 ist. Wenn dies der Fall ist, wissen Sie, dass eine Abbruchtaste gedrückt wurde. Wenn nicht, ist ein anderer Fehlertyp aufgetreten, der auf die für Ihr Makro geeignete Weise behandelt werden sollte.

_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 (3021) 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: