Bob 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 AutoClose, ma non vuole che venga eseguita quando la seconda cartella di lavoro è 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 disattivare le macro nella seconda cartella di lavoro quando viene aperta sotto il controllo macro. (Se lo stai aprendo manualmente, puoi ovviamente tenere premuto il tasto Maiusc mentre si apre la cartella di lavoro, ma questo non aiuta la tua macro: non ha le dita per tenere premuto quel tasto!)

Tuttavia, ci sono un paio di soluzioni alternative. Il primo prevede la modifica del codice che chiude la seconda cartella di lavoro, in questo modo:

Application.EnableEvents = False Workbooks("SecondBook.xls").Close Application.EnableEvents = True

Impostando la proprietà EnableEvents su False, l’evento che accadrà (chiusura della cartella di lavoro) non attiverà la macro AutoClose.

Puoi (e dovresti) quindi 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 AutoClose della seconda cartella di lavoro. Questo flag potrebbe verificare se la prima cartella di lavoro è aperta e, in tal caso, non eseguire il codice principale nella macro AutoClose.

Per fare ciò, nella seconda cartella di lavoro in cima alle pagine del modulo aggiungi il seguente codice:

Dim AutoCloseDisabled as Boolean Sub DisableAutoClose()

AutoCloseDisabled=True End Sub

Si noti che l’istruzione di dichiarazione per la variabile AutoCloseDisabled è al di fuori di qualsiasi procedura, il che significa che sarà di ambito globale e accessibile all’interno di tutte le procedure.

Successivamente, modifica la macro AutoClose in modo che il suo corpo sia racchiuso in un’istruzione If, ​​come mostrato qui:

Sub AutoClose()

'variable declarations here

If Not AutoCloseDisabled then

'body of AutoClose here

End if End Sub

L’idea è che quando la seconda cartella di lavoro viene aperta normalmente, la variabile AutoCloseDisabled verrà automaticamente impostata su False. (L’impostazione predefinita delle variabili booleane è 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 tua prima cartella di lavoro, il codice nella prima cartella di lavoro può chiamare la macro DisableAutoClose nella 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 AutoClose.

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (10232) si applica a Microsoft Excel 2007 e 2010. Puoi trovare una versione di questo suggerimento per la vecchia interfaccia del menu di Excel qui: