2010-08-18 22 views
7

Vorrei eseguire un codice quando un utente chiude un modulo utilizzando il pulsante x nell'angolo in alto a destra della finestra (Ho il caricamento del modulo quando il foglio di calcolo Excel è aperto, e nasconde Excel. Voglio uscire excel una volta che il modulo è stato chiuso, o almeno mostrare di nuovo Excel così l'utente può uscire manualmente.Esegui codice quando il modulo viene chiuso in VBA (Excel 2007)

Guardando le proprietà del modulo, la proprietà Unload non è presente, né sono in grado di capire come eseguire una funzione che viene eseguita quando il modulo è chiuso.

Sfortunatamente, la codifica in VB non è un'opzione, deve essere VBA.

Sono a conoscenza del codice necessario per mostrare Excel o uscire definitivamente, ma non come legarlo all'evento di scarico.

risposta

0

È possibile utilizzare Unload Me in VBA per chiudere un modulo. Basta inserire il codice per chiudere Excel immediatamente successivo.

+1

Grazie, ma come fa questo mi permette di eseguire codice quando l'utente fa clic sul pulsante x? Forse non ho chiarito la questione, lo modificherò ora. – Pixotic

+0

Oh capisco, ho (erroneamente) assunto che l'utente stia uscendo tramite un clic sul pulsante del modulo, non il pulsante x sulla finestra. – Michael

0

provare qualcosa di simile: -

Private Sub Form1_FormClosing(sender as Object, e as FormClosingEventArgs) _ 
    Handles Form1.FormClosing 

    //Code you want to execute 

End Sub 
+0

Segnala un errore, affermando che _ è un carattere non valido. – Pixotic

+0

Dovrebbe esserci un evento FormClosing che è possibile selezionare per il proprio Modulo, quando si guarda il codice sorgente. Ecco un collegamento a un esempio: http://img385.imageshack.us/img385/3966/wat3am9.jpg – Daniel

+1

Nessun evento FormClosing in UserForm (Excel VBA). – Xdg

10

Un collega è stato in grado di fornire la risposta, tra cui ad esempio qui per tutti gli altri

Private Sub userform_terminate() 

    'Code goes here 

End Sub 
+0

Si noti che questo viene attivato anche quando si nasconde un modulo. Usa la risposta di MRS1367 se vuoi solo catturare il pulsante di chiusura (x) nell'angolo in alto a destra! – OfficialBAMM

9

È possibile utilizzare QueryClose evento del form come segue:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 
    If CloseMode = 0 Then 
     ' Your codes 
     ' Tip: If you want to prevent closing UserForm by Close (×) button in the right-top corner of the UserForm, just uncomment the following line: 
     ' Cancel = True 
    End If 
End Sub 

Si può al in modo da utilizzare vbFormControlMenu come questo:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 
    If CloseMode = vbFormControlMenu Then 
     'Your code goes here 
    End If 
End Sub 
0
Private Sub Form_Unload(Cancel As Integer) 
    Dim msgRes As VbMsgBoxResult 
    msgRes = MsgBox("Exit form ?", vbYesNo) 
    If msgRes = vbYes Then 
     'optional code 
    ElseIf msgRes = vbNo Then 
     Cancel = True 
    End If 
End Sub 
+0

Non è chiaro come questo fornisca una risposta alla domanda. Si prega di esporre su questa risposta per indicare il problema originale e la propria soluzione specifica. – theMayer

0

ero in grado di evitare che il modulo si chiuda quando il pulsante X è stato cliccato utilizzando i seguenti:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 
    Cancel = MsgBox("Please confirm cancellation", vbOKCancel + vbQuestion) = vbCancel 
End Sub 
Problemi correlati