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

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

Postdi Anthony47 » 07/04/13 10:15

Ma se il file lo chiudi, come fai a dire che quella istruzione non viene eseguita???

Possiamo fare u ragionamento alla volta?
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Sponsor
 

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

Postdi ramset1978 » 07/04/13 10:17

Flash30005 ha scritto: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.

Perdonami Flash, il quesito è solo ed esclusivamente per capire. Il problema si può risolvere in altri modi.
Io vorrei capire perchè la macro BeforeClose esegue correttamente TUTTE LE ISTRUZIONI ad eccezione di quella del riposizionamento del cursore tutto qua.
Se poi cercare di capire non ha senso allora ok. ;)
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 ramset1978 » 07/04/13 10:19

Anthony47 ha scritto:Ma se il file lo chiudi, come fai a dire che quella istruzione non viene eseguita???

Possiamo fare u ragionamento alla volta?

Anthony avevo già risposto a questa domanda. Perchè poi andando ad aprire MANUALMENTE i singoli file, vedo che qualsiasi istruzione contentuta nella BeforeClose è stata eseguita correttamente mentre il cursore non viene riposizionato.
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:22

Leggi il post precedente che ho rieditato
aggiungo, per farti capire meglio quanto detto.
Apri una cartella vuota e salvala (senza chiuderla) come Cartel1.xls
poi spostati con il cursore all'ultima cella del foglio o alla millesima riga, seleziona quindi la cella A1000
e chiudi il file
riapri cartel1 e ti accorgerai che il mouse si troverà (molto probabilmente) in A1

cioè la cella del salvataggio non della chiusura

ciao
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:29

Ragazzi probabilmente non riesco a spiegarmi e per questo vi chiedo scusa. Ci riprovo semplificando il codice:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Range("L1") = Time
Range("L1").select
End Sub


Questa istruzione contenuta nei singoli file viene correttamente eseguita quando apro e chiudo salvando ogni singolo file.
Se invece apro e poi chiudo salvando gli stessi file con una routine, quel codice viene eseguito parzialmente.
Infatti, riaprendo manualmente ogni singolo file vedo che l'istruzione Range("L1") = Time è stata correttamente eseguita in chiusura e salvata (trovo l'ora nella cella L1 aggiornata), mentre l'istruzione Range("L1").select non viene eseguita (il cursore non si trova in posizione L1).
Questo per semplificare la mia spiegazione.
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:40

DOPO tante insistenze ho provato, con questi risultati:
-le macro BeforeSave e BeforeClose NON eseguono alcuna Select
-quindi ad esempio una sequanza del tipo
Codice: Seleziona tutto
Worksheets("Foglio2").select
Range("A1")=Timer
scriverebbe il Timer su A1 del foglio inizialmente attivo.

Perche' avviene tutto cio' non lo so, ma sapendolo ci si puo' organizzare di conseguenza
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:43

Anthony47 ha scritto:DOPO tante insistenze ho provato, con questi risultati:
-le macro BeforeSave e BeforeClose NON eseguono alcuna Select
-quindi ad esempio una sequanza del tipo
Codice: Seleziona tutto
Worksheets("Foglio2").select
Range("A1")=Timer
scriverebbe il Timer su A1 del foglio inizialmente attivo.

Perche' avviene tutto cio' non lo so, ma sapendolo ci si puo' organizzare di conseguenza

Oh grazie a Dio ci siamo capiti.
Ci organizzeremo di conseguenza, grazie Anthony.
Grazie anche a Flash.
Un saluto a tutti. :)
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:51

Eh eh...
Aggiungo anche che usando
Workbooks("pippo.xls").Close savechanges:=True
Se pippo.xls ha una macro di BeforeClose e una di BeforeSave viene attivata prima la BeforeClose e poi la BeforeSave.
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 Flash30005 » 07/04/13 10:52

Fai la select all'apertura perché è l'unica cosa logica che puoi fare
inutile, credo, ripetere il discorso precedente
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:55

Flash30005 ha scritto:Fai la select all'apertura perché è l'unica cosa logica che puoi fare
inutile, credo, ripetere il discorso precedente

Ma si Flash il suggerimento è corretto, si può risolvere in tanti modi, nessun problema.
Volevo solo capire perchè quella istruzione non veniva eseguita. Ora è tutto chiaro.
Ciao 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 scossa » 07/04/13 13:05

riskismoney ha scritto: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



Scusate, intervengo senza aver provato il codice e non posso verificare, ma questa semplice modifica:
Codice: Seleziona tutto
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Worksheets("Foglio1").Activate
Worksheets("Foglio1").Range("day").Cells(Range("NrGiorni") + 1, 1).Select
MsgBox ("prova")
End Sub


non dovrebbe risolvere?
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 427
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

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

Postdi scossa » 07/04/13 13:06

Anthony47 ha scritto:DOPO tante insistenze ho provato, con questi risultati:
-le macro BeforeSave e BeforeClose NON eseguono alcuna Select
-quindi ad esempio una sequanza del tipo
Codice: Seleziona tutto
Worksheets("Foglio2").select
Range("A1")=Timer
scriverebbe il Timer su A1 del foglio inizialmente attivo.

Perche' avviene tutto cio' non lo so, ma sapendolo ci si puo' organizzare di conseguenza


Perchè prima devi attivare il Foglio, vedi mia proposta sopra.
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 427
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

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

Postdi ramset1978 » 07/04/13 13:17

No scossa, non è quello il problema.
Ciao
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 scossa » 07/04/13 13:54

riskismoney ha scritto:No scossa, non è quello il problema.
Ciao


Scusa ma se nel tuo codice metti:

Codice: Seleziona tutto
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Worksheets("Foglio1").Range("day").Cells(Range("NrGiorni") + 1, 1).Select
Selection.Offset(0, 0).Select
MsgBox (selection.parent.name & vbcrlf & selection.parent.parent.name)
End Sub


cosa ottieni?

Scusatemi ma ho la mano destra per 10 giorni inutilizzabile e posso solo usare il portatille col touch-pad.
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 427
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

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

Postdi ramset1978 » 07/04/13 14:00

Ottengo il nome del foglio e del file. Ma il cursore non si posiziona dove dovrebbe. Non so se hai letto il tutto ma in pratica nella BeforeClose funziona tutto tranne che la funzione select.
Ciao
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 scossa » 07/04/13 14:02

riskismoney ha scritto:Ottengo il nome del foglio e del file. Ma il cursore non si posiziona dove dovrebbe. Non so se hai letto il tutto ma in pratica nella BeforeClose funziona tutto tranne che la funzione select.
Ciao


Ovvio, ma quello "giusto" o quale?
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 427
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

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

Postdi ramset1978 » 07/04/13 14:06

Quello 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 Anthony47 » 07/04/13 16:08

Ciao scossa,
nella discussione ho scoperto due cose che non mi aspettavo:
-se comandi la chiusura di un file con Savechanges=True si attiva prima l' evento BeforeClose e poi BeforeSave
-nell' ambito di una BeforeClose o BeforeChange non funziona nessuna Select ne' Activate; nemmeno una Application.Goto
-addirittura se l' istruzione fosse sintatticamente sbagliata (tipo Sheets("AltroFoglio").Range("XY1").Select) l' errore non viene nemmeno rilevato, se siamo in un contesto di comandi vba (ripeto, tipo Workbooks("AltroFile.xls").Close Savechanges:=True).

Insomma e' la gestione del Workbook(Index).Save o Workbook(Index).Close Savechanges:=true che e' diversa dal normale Menu /File /Save.

Questo da prove fatte.
Ho trovato altre discussioni, anche sul forum Microsoft, dove si parla del problema; ma da nessuna parte ho finora trovato la spiegazione logica del fatto.

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 scossa » 07/04/13 17:37

Anthony47 ha scritto:Ciao scossa,
nella discussione ho scoperto due cose che non mi aspettavo:
-se comandi la chiusura di un file con Savechanges=True si attiva prima l' evento BeforeClose e poi BeforeSave
-nell' ambito di una BeforeClose o BeforeChange non funziona nessuna Select ne' Activate; nemmeno una Application.Goto
-addirittura se l' istruzione fosse sintatticamente sbagliata (tipo Sheets("AltroFoglio").Range("XY1").Select) l' errore non viene nemmeno rilevato, se siamo in un contesto di comandi vba (ripeto, tipo Workbooks("AltroFile.xls").Close Savechanges:=True).

Insomma e' la gestione del Workbook(Index).Save o Workbook(Index).Close Savechanges:=true che e' diversa dal normale Menu /File /Save.

Questo da prove fatte.
Ho trovato altre discussioni, anche sul forum Microsoft, dove si parla del problema; ma da nessuna parte ho finora trovato la spiegazione logica del fatto.


Ciao Anthony,

puoi provare a mettere, prima del select che non viene eseguito, un msgbox application.enableevents per vedere se gli eventi vengono automaticamente disabilitati?
Lo farei io ma ho già spiegato che sono momentaneamente impossibilitato.
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 427
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

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

Postdi Anthony47 » 07/04/13 23:43

Ciao scossa, spero che presto la tua sinistra sia brava quanto la destra...
Ho provato con questo codice:
In un file che tengo aperto
Codice: Seleziona tutto
Sub ppp()
'ActiveWorkbook.Save
ActiveWorkbook.Close savechanges:=True
End Sub

Nel file che metto attivo ho un foglio GEN e uno MAR (piu' altri); tengo GEN!A1 attivo al momento in cui eseguo passo passo la Sub ppp; in ThisWorkbook ho inserito
Codice: Seleziona tutto
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'NB: foglio attivo="GEN"
MsgBox Application.EnableEvents   'Aggiunta
Range("AD1") = Timer
'Sheets("MAR").Range("AA2").Select
Sheets("MAR").Activate
Range("AD2") = Timer
'Worksheets("MAR").Range("AZ1").Select
Application.Goto (Sheets("MAR").Range("AZ2"))
Range("AD3") = Timer
End Sub


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
ActiveSheet.Range("AZ1").Activate
End Sub

Eseguendo ppp passo passo:
-si esegue ActiveWorkbook.Close
-parte l' evento BeforeClose
-il msgbox (test suggerito da scossa) restituisce Vero
-AD1 viene compilata
-Sheets("MAR").Activate viene eseguita sul vba ma il foglio GEN rimane selezionato
-Range("AD2") = Timer il timer viene scritto sul foglio GEN!AD2
-Application.Goto (Sheets("MAR").Range("AZ2")) viene eseguita sul vba ma il foglio selezionato rimane GEN
-Range("AD3") = Timer il timer viene ancora scritto su foglio GEN
-si completa la gestione dell' evento BeforeClose

-Parte l' evento BeforeSave
-si esegue l' istruzione ActiveSheet.Range("AZ1").Activate ma la selezione rimane invariata
-si completa il BeforeSave, il file si chiude
-si completa la ppp
Le istruzioni commentate nella BeforeClose erano di test, la loro esecuzione provoca correttamente Run time error 1004 perche' sbagliate.

Se invece nella stessa situazione faccio Menu /Chiudi del file che contiene gli eventi BeforeClose e BeforeSave:
-metto break sulle prime istruzioni dei due eventi
-eseguo il comando Menu /File /Chiudi
-scatta l' evento BeforeClose
-msgbox restituisce sempre Vero
-il timer e' messo in AD1 di GEN (il foglio attivo)
-il foglio MAR viene attivato
-il timer e' scritto in MAR!AD2
-.GoTo porta la selezione su MAR!AZ2
-finisce l' evento BeforeClose
-Excel mi chiede se voglio salvare; rispondo Si
-scatta l' evento BeforeSave
-la cella AZ1 viene selezionata
-si conclude l' evento e il file viene chiuso

Se invece rieseguo la Sub ppp completa della ActiveWorkbook.Save (commentata nella prova precedente) ed avendo eliminato nella BeforeClose le varie scritture del timer:
-parte l' evento BeforeSave
-la selezione NON va su AZ1
-parte poi l' evento BeforeClose
-le selezioni NON cambiano
-termina la gestione di BeforeClose e il file si chiude

Insomma, nella gestione di questi eventi sembra bloccata la possibilita' di modificare la selezione del foglio o della cella attiva.

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

Precedente

Torna a Applicazioni Office Windows


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


Chi c’è in linea

Visitano il forum: Nessuno e 36 ospiti