Roberto sta elaborando le informazioni in una cartella di lavoro utilizzando una macro. Vorrebbe che la macro aprisse una seconda cartella di lavoro che contiene una macro Workbook_BeforeClose, ma non vuole che quest’ultima venga eseguita quando la seconda cartella di lavoro viene chiusa. Sta cercando un modo per aprire la seconda cartella di lavoro, sotto il controllo della macro nella prima cartella di lavoro, senza abilitare le macro nella seconda cartella di lavoro.
Non è possibile disabilitare le macro nella seconda cartella di lavoro quando la si apre sotto il controllo macro.
Ci sono un paio di soluzioni alternative, tuttavia. Il primo comporta la modifica del codice che chiude la seconda cartella di lavoro, in questo modo:
Questo contenuto è riservato agli abbonati
Solo gli utenti con Abbonamento VBA Coder oppure Ultimate possono visionarlo.
Se sei già abbonato Accedi per sbloccare il contenuto!
In caso contrario abbonati qui! L'abbonamento è conveniente.
E puoi interromperlo in ogni momento e in completa autonomia.
(puoi renderti conto di quanti siano i contenuti riservati
raggiungendo questa pagina)
Impostando la proprietà EnableEvents su False, l’evento che si verificherà (chiusura della cartella di lavoro) non attiverà la macro Workbook_BeforeClose. Puoi (e dovresti) poi impostare la proprietà EnableEvents su True in modo che gli eventi possano continuare in seguito.
Un’altra soluzione consiste nell’impostare una sorta di “flag” nella macro Workbook_BeforeClose della seconda cartella di lavoro. Questo flag potrebbe verificare se la prima cartella di lavoro è aperta e, in caso affermativo, non eseguire il codice principale nella macro Workbook_BeforeClose.
Per fare ciò, nella seconda cartella di lavoro nella parte superiore della pagina del modulo aggiungi il seguente codice:
Questo contenuto è riservato agli abbonati
Solo gli utenti con Abbonamento VBA Coder oppure Ultimate possono visionarlo.
Se sei già abbonato Accedi per sbloccare il contenuto!
In caso contrario abbonati qui! L'abbonamento è conveniente.
E puoi interromperlo in ogni momento e in completa autonomia.
(puoi renderti conto di quanti siano i contenuti riservati
raggiungendo questa pagina)
Si noti che l’istruzione di dichiarazione per la variabile AutoCloseDisabled è al di fuori di qualsiasi procedura, il che significa che avrà un ambito globale e sarà accessibile all’interno di tutte le procedure.
Successivamente, modifica la macro Workbook_BeforeClose in modo che il suo corpo sia racchiuso in un’istruzione If, come mostrato di seguito:
Questo contenuto è riservato agli abbonati
Solo gli utenti con Abbonamento VBA Coder oppure Ultimate possono visionarlo.
Se sei già abbonato Accedi per sbloccare il contenuto!
In caso contrario abbonati qui! L'abbonamento è conveniente.
E puoi interromperlo in ogni momento e in completa autonomia.
(puoi renderti conto di quanti siano i contenuti riservati
raggiungendo questa pagina)
L’idea è che quando la seconda cartella di lavoro viene aperta normalmente, la variabile AutoCloseDisabled verrà impostata automaticamente su False (le variabili booleane sono impostate su False quando vengono dichiarate). Poiché la procedura DisableAutoClose non viene mai eseguita nella cartella di lavoro, l’istruzione If nella macro AutoClose consente l’esecuzione del corpo effettivo della macro.
Se apri la seconda cartella di lavoro dalla prima cartella di lavoro, il codice nella prima cartella di lavoro può chiamare la macro DisableAutoClose della seconda cartella di lavoro, impostando così il flag AutoCloseDisabled su True. Ciò significa che quando la seconda cartella di lavoro viene chiusa, l’istruzione If salterà il corpo della macro Workbook_BeforeClose.