Uscita da Excel con msgbox



  • 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