Schließen-Schaltfläche in VBA-Formularen deaktivieren

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Schließen-Schaltfläche in VBA-Formularen deaktivieren

    Schließen-Schaltfläche in VBA-Formularen deaktivieren
    Versionen: Excel 97, 2000, 2002/XP und 2003

    Ich habe eine eigene Excel-Anwendung mit VBA-Code entwickelt, in der ich auch benutzerdefinierte Formulare (UserForms) einsetze. Um ein Formular zu schließen, sollen die Anwender auf die von mir vorgesehenen Schließen-Schaltflächen klicken, damit die Benutzereingaben vorher noch geprüft werden können. Jetzt besitzen VBA-Formulare aber generell die normale Schließen-Schaltfläche (den X-Button) am rechten Ende der Titelleiste, mit der sich die Prüfroutinen umgehen lassen. Gibt es eine Möglichkeit, diese Standard-Schaltfläche auszublenden, damit tatsächlich nur die von mir vorgesehene Schließen-Methode verfügbar ist?

    Die einfachste und schnellste Lösung besteht darin, das Anklicken der Schließen-Schaltfläche in der Titelleiste per VBA-Code abzufangen und zu deaktivieren. Die entsprechende Überwachungsroutine integrieren Sie in das "QueryClose"-Ereignis der UserForm. Die Ereignisprozedur arbeitet mit dem Parameter "CloseMode", mit dem Sie testen können, wie das Formular geschlossen wurde. Wenn die Standard-Schließen-Schaltfläche angeklickt wurde oder wenn der Anwender Alt+F4 gedrückt hat, setzen Sie den zweiten Parameter der Ereignisprozedur, "Cancel", auf "True", was ein Schließen des Formulars verhindert.

    In der Praxis bedeutet das, dass Sie den Programmcode der UserForm zum Beispiel um folgende Ereignisprozedur ergänzen:

    Private Sub UserForm_QueryClose(Cancel As Integer, _
    CloseMode As Integer)
    If CloseMode = vbFormControlMenu Then
    MsgBox "Diese Schaltfläche ist deaktiviert!"
    Cancel = True
    End If
    End Sub


    Zwingend erforderlich ist es dann natürlich, eine Befehlsschaltfläche in das Formular einzufügen, die ein normales Schließen der UserForm ermöglicht. Einer Schaltfläche mit dem Namen "CommandButton1" müsste im Programmcode der UserForm mindestens folgende Ereignisprozedur zugewiesen sein:

    Private Sub CommandButton1_Click()
    Unload Me
    End Sub

    Übernommen von SmartTools