Uscita da Excel con msgbox
Hai un problema con Excel? 
Uscita da Excel con msgbox
di alexps81 data: 15/10/2015 09:31:41
Buongiorno a tutti, ho un problema sul pulsante di uscita da Excel.
In pratica il funzionamento dovrebbe essere pressappoco così:
Al click sulla X in alto a dx (chiusura di Excel) dovrebbe comparire un msgbox dove viene specificato che se clicco su SI allora Excel deve chiudersi senza salvare i dati immessi, mentre se clicco su NO allora deve chiudere il msgbox e tornare al foglio attivo, quindi non deve uscire più da Excel.
Di seguito posto il codice che ho provato a scrivere, chiaramente con la parte mancante verso del "vbNO".
Spero che così vada abbastanza bene, a meno che qualcuno non abbia un'idea migliore.
Tenete presente che "ThisWorkbook.Saved = True" l'ho inserita in modo da ingannare Excel.
Grazie mille per l'interessamento
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'PULSANTE ESCI
Dim i As Integer, s As String
i = msgbox("Chiudendo questo file, la tabella dei dati sarà svuotata (dati non recuperabili)." & vbCrLf & _
"Procedo?", vbExclamation + vbYesNo, "TABELLA C.V.")
If i = vbYes Then
ThisWorkbook.Saved = True
Else
If i = vbNo Then
??????????????????
??????????????????
??????????????????
End Sub |
di patel data: 15/10/2015 12:44:25
secondo me non puoi evitare l'uscita, questo evento ti permette di fare qualcosa prima di chiudere, ma non evitare la chiusura.
di alfrimpa data: 15/10/2015 12:48:02
Ciao Alex
Potresti provare con Application.Quit così come indicato sotto ma c'è il problema che Excel ti chiede comunque di salvare il file.
Per evitare questo si dovrebbe usare l'istruzione Application.DisplayAlerts = False prima di Application.Quit ma se poi chiudi Excel nel momento in cui apri un'altra cartella di lavoro devi ripristinare i messaggi di avviso con Application.DisplayAlerts = True
Non so se sono stato chiaro.
Alfredo
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'PULSANTE ESCI
Dim i As Integer, s As String
i = msgbox("Chiudendo questo file, la tabella dei dati sarà svuotata (dati non recuperabili)." & vbCrLf & _
"Procedo?", vbExclamation + vbYesNo, "TABELLA C.V.")
If i = vbYes Then
ThisWorkbook.Saved = True
Else
Application.Quit
End If
End Sub |
di Marius44 data: 15/10/2015 13:27:31
Salve a tutti
@alfrimpa
Piccolo errore. Con la macro da te indicata se rispondi si al messaggio non salva i dati ma non fa nulla (non si chiude il file); se rispondi no al messaggio, invece, chiude il file (chiedendo, giustamente, se vuoi salvare oppure no).
Proporrei la macro adattata come sotto ma c'è un però. In questo momento non mi rendo conto perchè mi presenta il messaggio DUE volte.
Option explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean) 'PULSANTE ESCI
Dim i As Integer, s As String '<---- questa s a cosa serve?
i = MsgBox("Chiudendo questo file, la tabella dei dati sarà svuotata (dati non recuperabili)." & vbCrLf & _
"Procedo?", vbExclamation + vbYesNo, "TABELLA C.V.")
If i = vbYes Then
Cancel = False
ThisWorkbook.Saved = True
Application.Quit
ElseIf i = vbNo Then
Cancel = True
Exit Sub
End If
End Sub |
di alexps81 data: 15/10/2015 14:08:46
Grazie a tutti, questione risolta. (Non avevo dubbi sulla vostra preparazione)
Vorrei chiedere solo una cosa, dato che sono ignorante in queste cose:
Cancel = True e Cancel = False che funzione svolgono in questo codice? Cioè tradotto cos'è che fanno?
P.S. x Marius44
s As String ho sbagliato a inserirla. Non serve a nulla
di Cucù data: 15/10/2015 14:50:40
Perchè
'perchè
ElseIf i = vbNo Then
Cancel = True
Exit Sub
End If
'e non
Else
Cancel = True
Exit Sub
end If |
di Marius44 data: 15/10/2015 15:02:25
@Cucù
ho voluto mantenere la struttura che ha impostato l'utente anche per fargli capire che else e nella riga successiva If si possono unire in un'unica riga. Per il resto hai ragione: l'una o l'altra forma sono uguali.
@alexps81
Nella macro da te impostata fra le parentesi metti Cancel as boolean che, tradotto, vuol dire che Cancel può assumere un valore booleano, cioè si/no, vero/falso.
Se nella macro non cambi il valore, Excel non sa cosa farsene di quella variabile e non sa come comportarsi. Se lo imposto a False, Excel capisce che può eseguire la parte di codice (tieni presente che, in questo caso, si poteva anche omettere). Se, invece, lo imposto a True allora Excel capisce che non deve eseguire il codice.
Ciao,
Mario
di alexps81 data: 15/10/2015 15:08:20
Ottima spiegazione......ho capito, grazie
Vuoi Approfondire?