Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Abfrage Schliessen Userform über Kreuz

Forumthread: Abfrage Schliessen Userform über Kreuz

Abfrage Schliessen Userform über Kreuz
19.06.2009 11:50:51
Roland
Hallo fleissige VBA-Helfer
Ich habe ein Problem, bei dem ich im Moment nicht durchblicke.
Ausgangslage:
Ein Code "Test0815" in einem normalen Modul
Eine Userform "Userform1"
Frage:
Wie kann ich im Test0815 abfragen ob die Userform1 übers Kreuz oben rechts verlassen wurde, da ich wenn dies der User macht den Code abbrechen, also Exit Sub machen möchte.
Ich hatte da so eine Jdee, weil ja beim schliessen übers Kreuz CloseMode 0 zurückgegeben wird, dachte ich mir ich könnte das im Code Test0815 abfragen. Funktioniert aber so nicht.
If UserForm1.UserForm_QueryClose.CloseMode = 0 Then
Exit Sub
End If
Die Möglichkeit über eine Public-Variable zB. str_abgebrochen "ja" beim schliessen zu übergeben und dann diese im Code abzufragen, kenne ich. Es gibt hier sicher aber eine elegantere Lösung.
Hat jemand eine Jdee?
Besten Dank
Gruss Roland
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Abfrage Schliessen Userform über Kreuz
19.06.2009 11:59:24
Tino
Hallo,
Deferiere Dir in einem Modul eine Public Variable vom Typ Boolean,
diese setzt Du auf True wenn über ein Button beendet wird, diese kannst Du dann im Code abfragen.
Denke aber daran, vor dem Aufruf der Userform diese auf False zu setzen.
Gruß Tino
AW: Abfrage Schliessen Userform über Kreuz
19.06.2009 12:02:07
Ramses
Hallo
Das geht schon

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then
'Verhindert das schliessen
Cancel = True
MsgBox "Dies ist nicht erlaubt.", vbOKOnly + vbInformation, "Error."
'Unload Me
'Zum Schliessen der Application bitte Kommentarzeichen entfernen
'Application.Quit
End If
End Sub


Gruss Rainer

Anzeige
AW: Abfrage Schliessen Userform über Kreuz
19.06.2009 12:05:03
NoNet
Hallo Roland,
der Ansatz ist grundsätzlich richtig, allerdings ist CloseMode nur dann bekannt, solange das UF noch aktiv ist !
Ergo : Speichere diesen Status z.B. in einer Globalen Variable und werte diese nach dem Schliessen des UF aus.
Kopiere dazu diesen Code in ein allgemeines Modul (z.B. Modul1) :

Public intUFCloseMode As Integer 'Globale Variable für CloseMode in UF
Sub ufAnzeigen()
intUFCloseMode = 999 'Vorbelegung
UserForm1.Show
If intUFCloseMode = 0 Then MsgBox "UF per Kreuz geschlossen !"
End Sub


Im UF verwendest Du diesen Code zum "Speichern" des Status :


Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
intUFCloseMode = CloseMode 'Status des Schliessens in globale Variable speichern
End Sub


Gruß, NoNet

Anzeige
AW: Abfrage Schliessen Userform über Kreuz
19.06.2009 12:17:20
Roland
Hallo zusammen
Besten Dank für eure Hilfe.
Die Lösung von NoNet entspricht meinen Vorstellungen und funktioniert. Geht aber in die Richtung mit der Public-Variable, die ich schon beschrieben habe.
So wie es den Anschein macht geht das also nur über eine Public-Variable.
Nochmals besten Dank
Gruss Roland
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Userform in Excel über das Kreuz schließen: So funktioniert's


Schritt-für-Schritt-Anleitung

Um eine Userform in Excel über das Kreuz (auch als "rotes Kreuz" bekannt) zu schließen und dabei eine Abfrage einzuführen, kannst Du folgendes Vorgehen nutzen:

  1. Öffne das VBA-Editor (drücke ALT + F11).

  2. Erstelle eine neue Userform (Rechtsklick im Projektfenster > Einfügen > Userform).

  3. Füge einen Button hinzu, um die Userform normal zu schließen.

  4. Füge den folgenden Code in das Userform ein:

    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
       If CloseMode = vbFormCode Then
           ' Userform wird durch Button geschlossen
           Exit Sub
       ElseIf CloseMode = 0 Then
           ' Verhindert das Schließen über das Kreuz
           Cancel = True
           MsgBox "Das Schließen über das Kreuz ist nicht erlaubt.", vbOKOnly + vbInformation, "Hinweis"
       End If
    End Sub
  5. Füge den Code zum Anzeigen der Userform in ein Modul ein:

    Sub ShowUserForm()
       UserForm1.Show
    End Sub
  6. Teste Deine Userform, indem Du den ShowUserForm-Befehl ausführst.


Häufige Fehler und Lösungen

  • Fehler: Userform schließt sich trotzdem über das Kreuz.

    • Lösung: Stelle sicher, dass Du Cancel = True in Deinem UserForm_QueryClose-Event setzt, wenn CloseMode = 0.
  • Fehler: Keine Abfrage erfolgt.

    • Lösung: Überprüfe, ob der Code im richtigen Userform eingebettet ist und dass die Userform tatsächlich korrekt aufgerufen wird.

Alternative Methoden

Eine weitere Möglichkeit, das Schließen der Userform zu steuern, ist die Verwendung einer globalen Variable. Dies kann nützlich sein, um den CloseMode abzufragen. Hier ein Beispiel:

  1. Definiere eine globale Variable im Modul:

    Public intUFCloseMode As Integer
  2. Speichere den CloseMode in der Userform:

    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
       intUFCloseMode = CloseMode
    End Sub
  3. Frage den Status nach dem Schließen ab:

    Sub ShowUserForm()
       intUFCloseMode = 999 ' Vorbelegung
       UserForm1.Show
       If intUFCloseMode = 0 Then
           MsgBox "Userform wurde per Kreuz geschlossen!"
       End If
    End Sub

Praktische Beispiele

Hier sind einige praktische Anwendungen:

  • Abfrage vor dem Schließen: Du kannst eine Abfrage einfügen, die den Nutzer fragt, ob er wirklich schließen möchte, wenn er das Kreuz verwendet.

    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
       If CloseMode = 0 Then
           If MsgBox("Möchten Sie die Userform wirklich schließen?", vbYesNo + vbQuestion) = vbNo Then
               Cancel = True
           End If
       End If
    End Sub
  • Zählung von Schließvorgängen: Du kannst eine Zählung implementieren, um zu erfassen, wie oft die Userform über das Kreuz geschlossen wurde.


Tipps für Profis

  • Nutze Public-Variablen strategisch, um den Status der Userform zu speichern. Dies ermöglicht eine flexiblere Handhabung der Logik.
  • Denke daran, den CloseMode zu überprüfen, bevor Du die Userform schließt, um unerwünschte Effekte zu vermeiden.
  • Halte Deinen Code sauber und gut dokumentiert, um die Wartbarkeit zu erhöhen.

FAQ: Häufige Fragen

1. Frage: Was ist der Unterschied zwischen CloseMode = 0 und CloseMode = vbFormCode? Antwort: CloseMode = 0 bedeutet, dass die Userform über das Kreuz geschlossen wird, während CloseMode = vbFormCode bedeutet, dass die Userform durch einen Code (z.B. einen Button) geschlossen wird.

2. Frage: Wie kann ich den CloseMode in einer Access-Anwendung überprüfen? Antwort: Ähnlich wie in Excel kannst du in Access VBA den CloseMode im Form_Close-Ereignis verwenden, um das Schließen des Formulars zu steuern.

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