Clever-Excel-Forum

Normale Version: VBA - QueryClose mit MsgBox Ja Nein
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Ihr Lieben,

ich brauch mal kurz euren Rat.

Ich habe in einer Exceldatei ein Formular, dass sich direkt öffnet, wenn man die Datei öffnet.

Jetzt möchte ich, dass wenn der Nutzer beim Formular auf das Windows-X klickt um das Formular
zu schließen, eine Abfrage kommt die die Datei beendet oder zum Formular zurück kehrt.

Mit meinem Code klappt soweit alles, bis auf den Punkt, wenn man auf "Nein" klickt. Da geht das
Formular dann einfach zu.


Code:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

If MsgBox("Möchtest du die Datei wirklich schließen? Alle eingetragenen Daten gehen dabei verloren.", vbYesNo) = vbYes Then
ActiveWorkbook.Close savechanges:=False
Else
Exit Sub
End If

End Sub

Was muss ich ändern, damit beim klick auf nein einfach nur die MsgBox zu geht und wieder das Formular zu sehen ist?

Danke Vorab :19:
Code:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
on error resume next

Dim a as integer

a = MsgBox("Möchtest du die Datei wirklich schließen? Alle eingetragenen Daten gehen dabei verloren.", vbYesNo)

If a = vbYes Then
  ActiveWorkbook.Close savechanges:=False
Else
  cancel = true
  Exit Sub
End If

End Sub
Super, das Funktioniert klasse. Danke :19: 

Vielleicht kannst du mir gleich noch etwas beantworten:

Wenn ich jetzt einen versteckten Button einbauen möchte, um das Formular zu schließen, damit ich es nicht ausfüllen muss und
direkt an den ExcelSheet komme, wie müsste ich den vom Code her aufbauen? Denn...


Code:
Private Sub CommandButtonClose_Click()

Unload Me

End Sub


...Klappt so ja nicht mehr, da durch das QueryClose dann die gleiche Abfrage greift und die MsgBox wieder kommt.

über
Code:
Application.DisplayAlerts = False
und danach wieder auf True stzen, klappt's leider auch nicht.
Lass Dein "Unload me" drin! Es muss dann noch der Wert von CloseMode ausgewertet werden:

Code:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
on error resume next
Dim a as integer

if(closemode =0) then

a = MsgBox("Möchtest du die Datei wirklich schließen? Alle eingetragenen Daten gehen dabei verloren.", vbYesNo)
If a = vbYes Then
 ActiveWorkbook.Close savechanges:=False
Else
 cancel = true
 Exit Sub
End If
else
  cancel = false
  exitr sub
end if

End Sub
Jetzt läuft es perfekt. Ganz Lieben Dank für deine Hilfe :19: