Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: CloseMode

CloseMode
02.09.2007 16:43:00
Ingo
Hallo allerseits,
ich verstehe momentan eine "Verhaltensweise" nicht wirklich...
Mit beiden u.a. Varianten kann ich eine UF schliessen - wird auch fast alles ausgeführt.
Lediglich die letzte Anweisung in QueryClose greift nicht.
Wo ist wohl mein Gedankenfehler ?
Danke und Gruß
Ingo

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then
Unload Me
Erase Arr_Orga
Call Arr_Personal_Löschen
If Einzelanfrage Then ThisWorkbook.Close False  'DIES HIER geht nicht
End If
End Sub



Private Sub cmd_ESC_Click()
Unload Me
Erase Arr_Orga
Call Arr_Personal_Löschen
If Einzelanfrage Then ThisWorkbook.Close False
End Sub


Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CloseMode
02.09.2007 16:55:00
Hajo_Zi
Hallo Ingo,
UserForm_QueryClose wird nur ausgefphrt fals Userform mit X geschlossen wird.

AW: CloseMode
02.09.2007 17:00:11
Ingo
Hmmm.. und was bedeutet Deine Antwort für meine Frage ?
Schliesse ich übers Kreuz habe ich ja das besagte "Problem", dass die
letzte Anweisung nicht ausgeführt wird.
Ingo

Anzeige
erledigt-Schreibfehler eingeschlichen o.t.
02.09.2007 17:06:00
Ingo

AW: CloseMode
02.09.2007 17:34:00
Beverly
Hi Ingo,
hilft dir vielleicht diese Erklärung weiter? Zitat aus der VBA-Hilfe:

Tritt ein, bevor eine UserForm geschlossen wird.
Bemerkungen
Mit diesem Ereignis wird normalerweise sichergestellt, daß die in einer Anwendung enthaltenen
Benutzerformularen keine nichtbeendeten Operationen enthalten, wenn diese Anwendung geschlossen
wird. Wenn ein Benutzer z.B. neue Daten noch nicht in einer UserForm gespeichert hat, kann die
Anwendung den Benutzer auffordern, die Daten zu speichern.
Wenn eine Anwendung geschlossen wird, können Sie die QueryClose-Ereignisprozedur verwenden,
um die Cancel-Eigenschaft auf den Wert True festzulegen, wodurch der Schließvorgang gestoppt  _
wird.


Da in diesem Augenblick das UserForm ja noch geöffnet ist, kann die Mappe auch nicht geschlossen werden.
________________________________________

Anzeige
AW: CloseMode
02.09.2007 17:30:22
K.Rola
Hallo,
vielleicht wird es klarer, wenn du mal folgendes testest.
Erstmal über das Schließkreuz schließen und dan mit folgendem Einzeiler:

Private Sub UserForm_Click()
Unload Me
End Sub



Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
MsgBox CloseMode
End Sub


Gruß K.Rola

Anzeige
;
Anzeige

Infobox / Tutorial

Umgang mit dem CloseMode in VBA UserForms


Schritt-für-Schritt-Anleitung

Um die UserForm_QueryClose-Ereignisprozedur in Excel VBA richtig zu nutzen, befolge diese Schritte:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Erstelle ein neues UserForm: Klicke auf Einfügen > UserForm.

  3. Füge die Code-Prozedur hinzu: Klicke doppelt auf das UserForm und füge den folgenden Code ein:

    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
       If CloseMode = 0 Then
           Unload Me
           ' Hier kannst du zusätzliche Befehle wie das Löschen von Arrays einfügen
           Call Arr_Personal_Löschen
           If Einzelanfrage Then ThisWorkbook.Close False
       End If
    End Sub
  4. Teste die Schließfunktion: Führe das UserForm aus und schließe es über das Schließkreuz. Achte darauf, dass die letzte Anweisung in der Prozedur ausgeführt wird.


Häufige Fehler und Lösungen

  • Problem: Die letzte Anweisung in UserForm_QueryClose wird nicht ausgeführt.

    • Lösung: Stelle sicher, dass die Abfrage über das Schließkreuz (CloseMode = 0) erfolgt. Wenn das UserForm durch andere Methoden geschlossen wird, wird das QueryClose-Ereignis nicht aufgerufen.
  • Problem: ThisWorkbook.Close funktioniert nicht wie erwartet.

    • Lösung: Überprüfe, ob die Variable Einzelanfrage korrekt gesetzt ist und dass das UserForm tatsächlich in einem Zustand ist, wo es geschlossen werden kann.

Alternative Methoden

Falls du Probleme mit der UserForm_QueryClose-Ereignisprozedur hast, kannst du stattdessen die cmd_ESC_Click-Methode verwenden:

Private Sub cmd_ESC_Click()
    Unload Me
    Call Arr_Personal_Löschen
    If Einzelanfrage Then ThisWorkbook.Close False
End Sub

Diese Methode wird aufgerufen, wenn der Benutzer auf einen bestimmten Button klickt, um das UserForm zu schließen.


Praktische Beispiele

Hier sind einige Beispiele zur Verwendung von UserForm_QueryClose in einem praktischen Kontext:

  1. Abfrage vor dem Schließen: Du kannst eine Bestätigungsabfrage hinzufügen, bevor das UserForm geschlossen wird.

    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
       If CloseMode = 0 Then
           If MsgBox("Möchten Sie das Formular wirklich schließen?", vbYesNo) = vbNo Then
               Cancel = True
           End If
       End If
    End Sub
  2. Daten speichern vor dem Schließen: Wenn das UserForm Daten enthält, kannst du sicherstellen, dass diese gespeichert werden, bevor es geschlossen wird:

    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
       If CloseMode = 0 Then
           ' Speichern der Daten
           Call DatenSpeichern
       End If
    End Sub

Tipps für Profis

  • Verwendung von Cancel: Nutze die Cancel-Eigenschaft innerhalb des QueryClose-Ereignisses, um das Schließen des UserForms zu verhindern, wenn bestimmte Bedingungen nicht erfüllt sind.
  • Debugging: Verwende Debug.Print oder MsgBox, um den Wert von CloseMode zu überprüfen, während du dein UserForm testest.
  • Event-Handling: Sei dir bewusst, dass das UserForm_QueryClose-Ereignis nur ausgeführt wird, wenn das UserForm über das Schließkreuz geschlossen wird.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen CloseMode und Cancel? CloseMode gibt an, wie das UserForm geschlossen wird (z.B. über das Schließkreuz oder per Code), während Cancel verwendet wird, um den Schließvorgang abzubrechen.

2. Kann ich UserForm_QueryClose auch für andere Formulare verwenden? Ja, die UserForm_QueryClose-Prozedur kann in jedem UserForm verwendet werden, um benutzerdefinierte Schließlogik zu implementieren.

3. Was passiert, wenn ich Unload Me in UserForm_QueryClose aufrufe? Unload Me entfernt das UserForm aus dem Speicher, was bedeutet, dass alle Variablen, die darin definiert sind, ebenfalls gelöscht werden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige