Condividi tramite

Problemi con Private Sub Workbook_BeforeClose(Cancel As Boolean)

Anonimo
2016-10-06T08:30:06+00:00

Ciao a tutti,

Esiste una macro  che se eseguita chiude in maniera corretta  il file e nella casella "X3"  riporta il valore 1 in modo che in chiusura il programma eviti di riportare il MsgBox ("Stai uscendo ...).

Se simulato in un modulo il tutto funziona ,se riportato nel BeforeClose  il sistema ignora che nella cella X3 ci sia il valore 1 ed esegue il MsgBox.  Non capisco dove sia l'errore

Ciao & grazie


Private Sub Workbook_BeforeClose(Cancel As Boolean)

Range("X3").Select

If ActiveCell.Offset(0, 0) = 1 Then GoTo LINEA1

Rep = MsgBox("Stai uscendo senza seguire la PROCEDURA PREVISTA" & vbCrLf _

& "ogni aggiornamento scheda" & vbCrLf & vbCrLf & _

"ANDRA'  PERSO  !!!", _

1 + 32, "By Max Pecar")

LINEA1:

Range("X3").Select

Selection.ClearContents

End Sub

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

7 risposte

Ordina per: Più utili
  1. Anonimo
    2016-10-06T14:19:59+00:00

    si ho provato ma non lo fa, ignora il comando,

    cerco di essere più chiaro.

    abbiamo 2 possibilità

    l'operatore chiude il programma lanciando una macro che:

    1. Fa diversi controlli poi  Scrive in X3 il valore 1
    2. termina con questo ultimo comando  .....   ActiveWorkbook.Close SAVECHANGES:=True
    3. Quindi esegue ....   Private Sub Workbook_BeforeClose(Cancel As Boolean) vedi quanto riportato all'inizio di questo argomento
    4. avendo seguito la procedura corretta il programma trova 1 in X3 chiude senza mostra il Msgbox

    Se invece l'operatore si scorda  di lanciare la macro e per chiudere schiaccia la x in alto a destra la Sub  Workbook_BeforeClose(Cancel As Boolean)   si esegue, NON TROVA 1 in X3  e lancia l'avviso con il Msgbox

    Dove sbaglio ?

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2016-10-06T10:15:00+00:00

    E' quello che fa.

    Hai provato?

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2016-10-06T09:55:35+00:00

    Ciao Casanmaner,  Mauro

    si se lo inserisci in un normale Modulo funziona perfettamente.

    Se lo inserisci in   ThisWorkbook  ignora il fatto che nella cella X3 ci sia il valore 1 ed invece che saltare alla linea1:  esegue la MsgBox.

    Relativamente alla risposta di Mauro..  

    Oppure:

    'questa controlla X3, se trona 1 in X3 .....   (deve andare alla linea 1.  poi, istruzione seguente prima di End Sub  riporta a zero il valore di  X3)   lo cancella e chiude il file

    'e se non trova 1 MsgBox (ed eventuale non chiusura)

    Ciao & grazie

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2016-10-06T09:13:50+00:00

    Provando (copiando pari pari le righe di comando) in realtà a me funziona e se nella cella X3 è presente 1 il msgbox non viene visualizzato.

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2016-10-06T09:13:25+00:00

    Capito poco (nulla).

    Comunque, prova:

    'questa scrive 1 in X3 prima di chiudere

    Private Sub Workbook_BeforeClose(Cancel As Boolean)

        Foglio1.Range("X3").Value = 1

        Save

    End Sub

    Oppure:

    'questa controlla X3, se trona 1 in X3 lo cancella e chiude il file

    'e se non trova 1 MsgBox (ed eventuale non chiusura)

    Private Sub Workbook_BeforeClose(Cancel As Boolean)

        If Foglio1.Range("X3").Value = 1 Then

            Foglio1.Range("X3").Value = ""

            Save

        Else

            MsgBox "Quello che vuoi"

            'oppue se no vuoi che l'utente chiuda il file,

            'aggiungi la riga qui sotto:

            'Cancel = True

        End If

    End Sub

    Cambia Foglio1 con il nome del tuo foglio.

    La risposta è stata utile?

    0 commenti Nessun commento