Ciao Massimo,
no, il metodo Quit non prevede argomenti. Te ne puoi accorgere da solo se, quando digiti l'istruzione, arrivato a scrivere Application.Quit<spazio> non compaiono argomenti. Invece quando scrivi ThisWorkbook.Close<spazio> appare il suggerimento:
Close([SaveChanges], [Filename], [RouteWorkbook]) a indicare che gli argomenti possibili di quel metodo sono tre e tutti facoltativi (perché racchiusi in parentesi quadra).
Quindi potresti scrivere:
Private Sub cmdClose_Click()
ThisWorkbook.Close SaveChanges:=True
Application.Quit
End Sub
In questo modo chiudi, salvando, la Cartella di lavoro nel cui Progetto VBA sta lo UserForm in cui viene eseguito quel codice e esci da Excel; così se ci sono altre Cartelle di lavoro aperte e non salvate ti viene proposto il solito messaggio: [Salva] [Non
salvare] [Annulla].
Però, però... Non va mica bene fare così. È come se allo UserForm gli togliessimo la sedia mentre sta per sedersi.
Meglio fare così:
- Aggiungi la variabile booleana a livello di modulo mblnQuitOnClose. Ovvero la scrivi subito dopo la lista delle costanti a livello di modulo:
Private Const mcstrColDat As String = "H"
Private mblnQuitOnClose As Boolean
- Nella routine-evento del pulsante cmdQuit scrivi:
Private Sub cmdQuit_Click()
mblnQuitOnClose = True
Unload Me
End Sub
- E, per finire, la routine-evento che viene eseguita per ultima allo scaricamento dello UserForm:
Private Sub UserForm_Terminate()
If mblnQuitOnClose Then
With ThisWorkbook
If Not .Saved Then .Save
.Application.Quit
End With
End If
End Sub