MOin!
Also zum Verständnis für dich noch. Das QueryClose wird bei jedem Beenden (rotesX, unload etc.) angesprungen. Dort kannst du dann auswerten, woher das Beenden kam.
In deinem Fall sollte das dann wohl eher so aussehen:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then 'rotes X
If MsgBox("Soll das neu generierte Schichtprotokoll wieder gelöscht werden?", vbOKCancel, "Meldung") = vbOK Then
Application.DisplayAlerts = False
Worksheets(3).Delete
Application.DisplayAlerts = True
'jetzt wird hier zugemacht
Else
'abbrechen gedrückt also nicht zumachen
Cancel = 1
End If
End If
End Sub
Ansonsten auch mal hier schauen.
https://docs.microsoft.com/de-de/office/vba/Language/Reference/User-Interface-Help/queryclose-event
Und mal nur als Idee. Ich persönlich nutze QueryClose meist nur, um das beenden mit rotemX zu unterbinden. Dazu hast du ja eine Userform um den Code gezielt auszufüllen. Solch ein Beender der UF finde ich immer unschön, da man da bei größeren Sachen nicht immer genau weiß, was der User schon angestellt hat. :-) Bei dir fängst du ja auch ein ggf. angelegtes Blatt damit ab. Mein Vorschlag wäre da eher das X ausblenden (API) bzw. unterdrücken (QueryCLose) und einen extra Button abbrechen einfügen. Dieser macht dann deine Prüfung bzgl. der Seite und nimmt dann Unload Me. Das ist aber wie geschrieben Geschmackssache.
VG
|