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

Forumthread: Fenster schließen!

Fenster schließen!
04.11.2005 22:00:54
Swen
Hallo an alle,
wie heißt das Ereignis wenn man oben rechts ein Userorm über das
kleine "x" schließt?
Gruß
Swen
Anzeige

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fenster schließen!
04.11.2005 22:12:53
Hilbman
Hallo Swen,
In der Userform kann man z.b. durch einen Button das Fenster mit folgendem code
schließen :

Private Sub CommandButton1_Click()
Unload Me
End Sub

Gruß Hilbman
AW: Fenster schließen!
04.11.2005 22:19:27
Swen
Hallo Hilbmann & alle,
das kenne ich schon ich möchte aber gerne das wenn
ich oben rechts das Fenster schließe noch etwas
dazu geben, daher muß ich wissen wie das Ereigniss
heist in VBA welches in dem Moment gestartet wird wenn
man das X obern rechts zum schließen drückt!
Gruß
Swen
Anzeige
AW: Fenster schließen!
04.11.2005 22:36:43
Matthias
Hi Swen,
ergänzend zu Leos Antwort ein Beispiel:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then
If MsgBox("X geklickt! Wirklich Schließen?", vbYesNo) = vbNo Then Cancel = True
End If
End Sub

Gruß Matthias
Anzeige
AW: Fenster schließen!
05.11.2005 00:38:34
Leo
Hi,
hast du schon mal ein professionelles Programm gesehen, bei dem eine Abfrage beim Klick auf das Schließkreuz erfolgt?
Hintergrund der Frage ist sicher, dass beim Klick auf den Schließen-Button irgenwelche Aktionen ausgeführt werden. Diese können ebensogut in QueryClose erledigt werden.
mfg Leo
Anzeige
AW: Fenster schließen!
05.11.2005 01:22:20
Matthias
Hi Leo,
ich wollte da jetzt kein professionelles Programm erstellen, sondern nur darstellen, dass man mit Cancel=True das Schießen auch verhindern kann ;-))
Gruß Matthias
AW: Fenster schließen!
05.11.2005 01:43:29
Leo
Hi,
"...sondern nur darstellen, dass man mit Cancel=True das Schießen auch verhindern kann ;-))"
...und genau das wirst du in einem "richtigen" Programm nicht antreffen. das Schließkreuz ist, wie der Name schon sagt, zum Schließen da. Wenn noch was aufgeräumt werden muss, kann das ja in diesem Ereignis erledigt werden oder halt in einer Sub, die sowohl von QueryClose, als auch vom Schließen- Button aufgerufen wird. Warum den user mit nicht windowsgemäßen Tatsachen konfrontieren?
mfg Leo
Anzeige
AW: Fenster schließen!
05.11.2005 09:08:37
Matthias
Hi Leo,
Warum den user mit nicht windowsgemäßen Tatsachen konfrontieren?
Du meinst also, Excel ist unprofessionell, weil sie so eine Möglichkeit eingebaut haben? Ich wollte ihm ja nur die Möglichkeit zeigen.
Wenn ich Eccel schließen will fragt er auch: Änderungen speichern? ja/nein/Abbrechen.
Und warum sollte ein Anwender in einem Userform nicht mal versehentlich das Schließkreuz geklickt haben, ohne z.B. zu wissen, das damit seine Änderungen verloren gehen.
Gruß Matthias
Anzeige
AW: Fenster schließen!
04.11.2005 22:17:46
Leo
Hi,
falls du das Ereignis meinst, was dadurch ausgelöst wird, ist es QueryClose.
mfg Leo
AW: Fenster schließen!
04.11.2005 22:34:22
Schwab
Du könntest auch einfach das X ausblenden lassen und dir selbst ne kleine Grafik einfügen.
Dann kannst du ganz normal mit dem Ereignis weitermachen, was passiert, wenn man auf die Grafik klickt.
Anzeige
AW: Fenster schließen!
04.11.2005 22:50:16
Swen
Hallo Schwab,
wie kann man sie ausblenden?
gruß
swen
AW: Fenster schließen!
05.11.2005 00:37:08
Schwab
Hierfür musst du folgenden Code einfügen:
[code]
Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLong Lib "User32" Alias "GetWindowLongA" ( _
ByVal hWnd As Long, _
ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "User32" Alias "SetWindowLongA" ( _
ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Private Declare Function DrawMenuBar Lib "User32" ( _
ByVal hWnd As Long) As Long
Private Const GWL_STYLE = -&H10
Private Const WS_SYSMENU = &H80000

Private Sub UserForm_Activate()
Dim lHwnd As Long
lHwnd = FindWindow("ThunderDFrame", Me.Caption)
SetWindowLong lHwnd, GWL_STYLE, GetWindowLong(lHwnd, GWL_STYLE) And Not WS_SYSMENU
DrawMenuBar lHwnd
End Sub

[/code]
Dann wird das X usw. ausgeblendet.
Beim erstellen der Userform wird es zwar noch angezeigt, aber beim ausführen nicht.
Jetzt kannst du einfach eine selbsterstellte Grafik einfügen und ihr dann z.B. das Ereignis "hide" hinzufügen beim Click darauf.
So mache ich es eigentlich immer, ist easy :)
Gruß
Schwab
Anzeige
AW: Fenster schließen!
05.11.2005 18:46:01
Swen
Hallo ihr beiden,
wo muß
code]
Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLong Lib "User32" Alias "GetWindowLongA" ( _
ByVal hWnd As Long, _
ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "User32" Alias "SetWindowLongA" ( _
ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Private Declare Function DrawMenuBar Lib "User32" ( _
ByVal hWnd As Long) As Long
Private Const GWL_STYLE = -&H10
Private Const WS_SYSMENU = &H80000
eingefügt werden?
Gruß
Swen
Anzeige
AW: Fenster schließen!
05.11.2005 18:47:35
Matthias
Hi Swen,
alles ins Userform-Codemodul.
Gruß Matthias
AW: Fenster schließen!
04.11.2005 23:07:08
Matthias
Hallo Schwab,
Betonung auf einfach, gell? ;-)
Gruß Matthias
;
Anzeige
Anzeige

Infobox / Tutorial

Fenster in Excel richtig schließen


Schritt-für-Schritt-Anleitung

Um ein Fenster in Excel zu schließen, insbesondere ein UserForm, kannst Du den folgenden VBA-Code verwenden. Dieser Code sorgt dafür, dass beim Klicken auf einen Button das Fenster geschlossen wird:

Private Sub CommandButton1_Click()
    Unload Me
End Sub

Falls Du das Schließen über das Schließkreuz (X) abfangen möchtest, kannst Du das QueryClose-Ereignis nutzen. Hier ein Beispiel, das eine Bestätigungsabfrage einfügt:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = 0 Then
        If MsgBox("X geklickt! Wirklich Schließen?", vbYesNo) = vbNo Then Cancel = True
    End If
End Sub

Häufige Fehler und Lösungen

Problem: Das UserForm schließt sich nicht, wenn das Schließkreuz gedrückt wird.

Lösung: Stelle sicher, dass Du das Cancel-Argument im QueryClose-Ereignis korrekt verwendest. Wenn Cancel = True gesetzt ist, wird das Schließen verhindert.

Problem: Ich kann das Schließkreuz nicht ausblenden.

Lösung: Um das Schließkreuz auszublenden, füge den folgenden Code in das UserForm-Codemodul ein:

Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLong Lib "User32" Alias "GetWindowLongA" ( _
    ByVal hWnd As Long, _
    ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "User32" Alias "SetWindowLongA" ( _
    ByVal hWnd As Long, _
    ByVal nIndex As Long, _
    ByVal dwNewLong As Long) As Long
Private Declare Function DrawMenuBar Lib "User32" ( _
    ByVal hWnd As Long) As Long
Private Const GWL_STYLE = -&H10
Private Const WS_SYSMENU = &H80000

Private Sub UserForm_Activate()
    Dim lHwnd As Long
    lHwnd = FindWindow("ThunderDFrame", Me.Caption)
    SetWindowLong lHwnd, GWL_STYLE, GetWindowLong(lHwnd, GWL_STYLE) And Not WS_SYSMENU
    DrawMenuBar lHwnd
End Sub

Alternative Methoden

Wenn Du ein neues Fenster in Excel öffnest und es schließen möchtest, gibt es auch die Möglichkeit, ein Excel-Dokument zu schließen, ohne das Programm zu beenden. Verwende folgenden Befehl:

ThisWorkbook.Close SaveChanges:=False

Um ein Browserfenster zu schließen, kannst Du die Application.Quit-Methode verwenden, dies schließt jedoch alle Excel-Fenster.


Praktische Beispiele

  • Bestätigungsdialog beim Schließen: Verwende das UserForm_QueryClose-Ereignis, um den Benutzer zu fragen, ob er wirklich schließen möchte.
  • Benutzerdefiniertes Schließen: Blende das Schließkreuz aus und erstelle eine eigene Schaltfläche für das Schließen. Dadurch kannst Du spezifische Aktionen durchführen, bevor das Fenster geschlossen wird.

Tipps für Profis

  • Nutze das QueryClose-Ereignis nicht nur zum Schließen, sondern auch um Daten zu speichern oder andere Aktionen durchzuführen, bevor das Fenster geschlossen wird.
  • Wenn Du das Schließen eines Excel-Dialogfelds steuern möchtest, stelle sicher, dass Du alle relevanten Daten prüfst, bevor Du das Fenster schließt.
  • Erstelle eine benutzerdefinierte Grafik für das Schließen, um das Benutzererlebnis zu verbessern.

FAQ: Häufige Fragen

1. Wie kann ich das Schließen eines Excel-Fensters verhindern?
Du kannst das Cancel-Argument im QueryClose-Ereignis auf True setzen, um das Fenster geschlossen zu halten.

2. Was mache ich, wenn das Schließkreuz nicht funktioniert?
Überprüfe, ob Du das richtige Ereignis (QueryClose) verwendest und stelle sicher, dass keine anderen Makros oder Einstellungen das Schließen beeinträchtigen.

3. Ist es möglich, mehrere Excel-Fenster gleichzeitig zu schließen?
Ja, Du kannst dies durch Schleifen über die Workbook-Objekte und das Schließen jedes einzelnen erreichen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige