devi sfruttare l'evento QueryUnload, che restituisce un parametro (UnloadMode) che ti permette di sapere il motivo per il quale il form è stato chiuso.
nel caso in vcui si tratti di una chiusura tramite la X (vbFormControlMenu) allora imposti il Cancel = 1 e fai eseguire tutto il codice che ti serve.

in pratica:

codice:
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If UnloadMode = vbFormControlMenu Then
    Cancel = 1
    ' ....
    ' Tutto il codice che ti serve
    ' ....
End If
End Sub
Boolean