Condividi:        

[vba] Macro in chiusura che non si esegue

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[vba] Macro in chiusura che non si esegue

Postdi ramset1978 » 06/04/13 20:52

Ho dei file che hanno questo codice:
Codice: Seleziona tutto
Private Sub Workbook_BeforeClose(Cancel As Boolean)
' esegue mia istruzione
End Sub

per fare in modo che ogni volta che si chiude il file venga eseguito un codice.

Il tutto funziona bene manualmente, se invece aggiorno l'elenco dei file tramite una routine che alla fine salva il file con questo codice
Codice: Seleziona tutto
Workbooks(NomeFile).Close SaveChanges:=True

la macro di chiusura dei singoli file non viene eseguita.

Sapete gentilmente dirmi come mai?
Saluti a tutti
Ramset1978
Win 7 + Office 2010 Ita
ramset1978
Utente Senior
 
Post: 223
Iscritto il: 25/03/12 16:04
Località: Avezzano

Sponsor
 

Re: [vba] Macro in chiusura che non si esegue

Postdi Anthony47 » 06/04/13 23:37

E' possibile che nella tua macro sia stato impostato Application.EnableEvents = False ??
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [vba] Macro in chiusura che non si esegue

Postdi ramset1978 » 06/04/13 23:44

Anthony47 ha scritto:E' possibile che nella tua macro sia stato impostato Application.EnableEvents = False ??

No, non ci sono impostazioni di questo tipo.
Ramset1978
Win 7 + Office 2010 Ita
ramset1978
Utente Senior
 
Post: 223
Iscritto il: 25/03/12 16:04
Località: Avezzano

Re: [vba] Macro in chiusura che non si esegue

Postdi Anthony47 » 06/04/13 23:46

Quale e' la macro completa di BeforeClose?
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [vba] Macro in chiusura che non si esegue

Postdi ramset1978 » 07/04/13 08:45

Anthony47 ha scritto:Quale e' la macro completa di BeforeClose?

Niente di particolare, solo un riposizionamento del cursore.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Worksheets("Foglio1").Range("day").Cells(Range("NrGiorni") + 1, 1).Select
Selection.Offset(0, 0).Select
MsgBox ("prova")
End Sub


In realtà ho verificato, inserendo MsgBox ("prova"), che la macro viene eseguita. Il messaggio "prova" viene infatti visualizzato, mentre l'istruzione
Worksheets("Foglio1").Range("day").Cells(Range("NrGiorni") + 1, 1).Select
Selection.Offset(0, 0).Select
non viene eseguita, eppure l'istruzione è corretta infatti singolarmente su ogni file viene eseguita.
Grazie
Ramset1978
Win 7 + Office 2010 Ita
ramset1978
Utente Senior
 
Post: 223
Iscritto il: 25/03/12 16:04
Località: Avezzano

Re: [vba] Macro in chiusura che non si esegue

Postdi Anthony47 » 07/04/13 08:56

Ma in quale workbook vuoi riposizionare il cursore, in quello che si sta chiudendo??
E per caso non hai anche un run time error?

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [vba] Macro in chiusura che non si esegue

Postdi ramset1978 » 07/04/13 08:59

Anthony47 ha scritto:Ma in quale workbook vuoi riposizionare il cursore, in quello che si sta chiudendo??
E per caso non hai anche un run time error?

Ciao

Si certo, nel file che si sta chiudendo.
No, non da nessun errore.
Ramset1978
Win 7 + Office 2010 Ita
ramset1978
Utente Senior
 
Post: 223
Iscritto il: 25/03/12 16:04
Località: Avezzano

Re: [vba] Macro in chiusura che non si esegue

Postdi Anthony47 » 07/04/13 09:17

Quando il file e' in chiusura sei quindi gia' sul suo Worksheets("Foglio1")
Ma se il file si chiude, come fai a dire che la nuova cella non viene selezionata??
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [vba] Macro in chiusura che non si esegue

Postdi ramset1978 » 07/04/13 09:20

Anthony47 ha scritto:Quando il file e' in chiusura sei quindi gia' sul suo Worksheets("Foglio1")
Ma se il file si chiude, come fai a dire che la nuova cella non viene selezionata??

Perchè riapro il file in questione e vedo che il cursore non sta dove dovrebbe essere.
Ramset1978
Win 7 + Office 2010 Ita
ramset1978
Utente Senior
 
Post: 223
Iscritto il: 25/03/12 16:04
Località: Avezzano

Re: [vba] Macro in chiusura che non si esegue

Postdi Anthony47 » 07/04/13 09:23

Ma se il file e' in chiusura.. Forse stai confondendo BeforeClose cone BeforeSave.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [vba] Macro in chiusura che non si esegue

Postdi ramset1978 » 07/04/13 09:28

Anthony47 ha scritto:Ma se il file e' in chiusura.. Forse stai confondendo BeforeClose cone BeforeSave.

Ciao

Anthony scusami... io aggiorno tutti i file, questi vengono chiusi e salvati. La macro BeforeClose viene eseguita. Poi apro manualmnete uno qualsiasi dei file aggiornati e vedo che la macro BeforeClose è stata eseguita ma quell'istruzione non è stata eseguita.
Ramset1978
Win 7 + Office 2010 Ita
ramset1978
Utente Senior
 
Post: 223
Iscritto il: 25/03/12 16:04
Località: Avezzano

Re: [vba] Macro in chiusura che non si esegue

Postdi Anthony47 » 07/04/13 09:39

La sequenza e' che tu Salvi il file, poi modifichi la selezione e chiudi il file senza salvare ulteriormente; quindi la tua selezione viene perduta.
Se invece usassi l' evento BeforeSave allora si che anche la selezione sarebbe salvata.
Oppure potresti inserire FileSave all' interno della BeforeClose, ma non lo consiglio perche' cosi' non riuscirai piu' a chiudere il file senza salvarlo (cosa che spesso e' utile).

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [vba] Macro in chiusura che non si esegue

Postdi ramset1978 » 07/04/13 09:45

Anthony47 ha scritto:La sequenza e' che tu Salvi il file, poi modifichi la selezione e chiudi il file senza salvare ulteriormente; quindi la tua selezione viene perduta.
Se invece usassi l' evento BeforeSave allora si che anche la selezione sarebbe salvata.
Oppure potresti inserire FileSave all' interno della BeforeClose, ma non lo consiglio perche' cosi' non riuscirai piu' a chiudere il file senza salvarlo (cosa che spesso e' utile).

Ciao

Mi sto perdendo.... ricapitoliamo.
I file che contengono BeforeSave (es. file1,file2, file3) etc... aperti e chiusi manualmente, fanno esattamente ciò che io voglio.
Gli stessi file aperti e chiusi con una codice macro fanno PARZIALMENTE ciò che voglio. Dico parzialmente perchè l'istruzione msgbox ad esempio viene eseguita correttamente mentre il posizionamento del cursore no. Ciò significa che la macro BeforeClose viene eseguita ma un'istruzione ivi contenuta (il riposizionamento del cursore) viene ignorata.
Ramset1978
Win 7 + Office 2010 Ita
ramset1978
Utente Senior
 
Post: 223
Iscritto il: 25/03/12 16:04
Località: Avezzano

Re: [vba] Macro in chiusura che non si esegue

Postdi Anthony47 » 07/04/13 09:54

I file che contengono BeforeSave (es. file1,file2, file3) etc... aperti e chiusi manualmente, fanno esattamente ciò che io voglio.
Gli stessi file aperti e chiusi con una codice macro fanno PARZIALMENTE ciò che voglio. Dico parzialmente perchè l'istruzione msgbox ad esempio viene eseguita correttamente mentre il posizionamento del cursore no. Ciò significa che la macro BeforeClose viene eseguita ma un'istruzione ivi contenuta (il riposizionamento del cursore) viene ignorata.

Lo vedi che confondi BeforeSave (una macro eseguita PRIMA di salvare il file) con BeforeClose (una macro eseguita prima di chiudere definitivamente il file, senza ulteriori salvataggi in mezzo, come da tuo codice).
Insomma la selezione che fai "BeforeClose", proprio perche' seguita dalla Chiusura immediata del file, viene perduta; diversa sarebbe la situazione se invece di una selezione cambiasse il contenuto del file, nel qual caso ti sarebbe chiesto (salvo impostazioni tipo DisplayAlerts=False) se salvare nuovamente il file.

Spero sia piu' chiaro...
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [vba] Macro in chiusura che non si esegue

Postdi ramset1978 » 07/04/13 09:58

Si è chiaro, però il problema non è nella BeforeClose ma nel file che aggiorna tutti gli altri e specificatamente in questa istruzione:
Workbooks(NomeFile).Close SaveChanges:=True
Se questa istruzione fosse "Chiudi il file e salva" (come io pensavo) non ci dovrebbe essere alcun errore. Se quel che tu dici è corretto significa che questa istruzione prima salva il file e poi lo chiude.
Giusto?
Ramset1978
Win 7 + Office 2010 Ita
ramset1978
Utente Senior
 
Post: 223
Iscritto il: 25/03/12 16:04
Località: Avezzano

Re: [vba] Macro in chiusura che non si esegue

Postdi Flash30005 » 07/04/13 10:01

Ma perché non posizioni il codice in workbook_open?
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [vba] Macro in chiusura che non si esegue

Postdi ramset1978 » 07/04/13 10:04

Flash30005 ha scritto:Ma perché non posizioni il codice in workbook_open?

Ciao Flash, perchè quel codice mi serve dopo che il file "è stato lavorato", non all'apertura.
Ramset1978
Win 7 + Office 2010 Ita
ramset1978
Utente Senior
 
Post: 223
Iscritto il: 25/03/12 16:04
Località: Avezzano

Re: [vba] Macro in chiusura che non si esegue

Postdi Anthony47 » 07/04/13 10:05

Se questa istruzione fosse "Chiudi il file e salva" (come io pensavo) non ci dovrebbe essere alcun errore. Se quel che tu dici è corretto significa che questa istruzione prima salva il file e poi lo chiude.
Non puo' essere che cosi', visto che prima chiudere e poi salvare non e' possibile.
C' e' un messaggio di Flash sopra, ma per me basta spostare l' istruzione nella BeforeSave.

Ciao a tutti
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [vba] Macro in chiusura che non si esegue

Postdi ramset1978 » 07/04/13 10:12

Ragazzi, voi ne sapete 1000 volte più di me, tuttavia non è come dite...
Allora ho modificato il codice in questo modo:
Codice: Seleziona tutto
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Range("L1") = Time
Worksheets("Foglio1").Range("day").Cells(Range("NrGiorni") + 1, 1).Select
Selection.Offset(0, 0).Select
End Sub


L'istruzione Range("L1") = Time memorizza l'ora anche quando aggiorno con la routine, quindi significa inequivocabilmente che la macro BeforeClose viene eseguita (correttamente) prima che il file venga salvato.
In pratica qualsiasi istruzione viene eseguita correttamente tranne questa:
Worksheets("Foglio1").Range("day").Cells(Range("NrGiorni") + 1, 1).Select
Selection.Offset(0, 0).Select

Il suggerimento di Flash non posso adottarlo come ho già detto sopra.
Ramset1978
Win 7 + Office 2010 Ita
ramset1978
Utente Senior
 
Post: 223
Iscritto il: 25/03/12 16:04
Località: Avezzano

Re: [vba] Macro in chiusura che non si esegue

Postdi Flash30005 » 07/04/13 10:14

Leggi messaggio risolutivo di Anthony

Ma non capisco il concetto dell'utente
prima di chiudere vorresti posizionare il cursore in un certo punto del foglio, per fare cosa?
Immagino che la risposta sia per averlo già posizionato lì quando andrai a riaprirlo, giusto?
allora va bene anche in Open
se non è così non ha senso ciò che dici.

Edit: Ci siamo accavallati

Aggiungo che il posizionamento del cursore non è motivo di salvataggio (ovvero non è una modifica del file) pertanto esegue il posizionamento in quell'attimo ma non è salvato il file quindi perdi l'operazione perché non è una modifica del foglio di lavoro
se vuoi usa quel codice e poi salva (con BeforeSave)

(poi mi dirai a cosa serve questa ripetizione:
Selection.Offset(0, 0).Select )
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "[vba] Macro in chiusura che non si esegue":


Chi c’è in linea

Visitano il forum: Marius44 e 57 ospiti