Guglielmo ha una serie di macro che esegue regolarmente e quando esegue ciascuna di esse manualmente, funzionano bene. Ha provato a inserire tutte le macro in una macro “EseguiTutte” (in modo da eseguire solo una macro invece di sei singole macro) e ora una di esse non funziona correttamente. Quando esegue la macro “EseguiTutte”, riceve un errore che indica che una cella è protetta e di sola lettura. Tuttavia, non c’è protezione sul foglio e se esegue le macro individualmente, non ottiene l’errore.
Va da sé che la macro che viene eseguita bene individualmente ma non in combinazione con le altre sta incontrando qualcosa che la sta facendo non funzionare correttamente. Probabilmente ciò significa che una macro che viene eseguita prima lascia la cartella di lavoro in uno stato diverso da quello in cui si troverebbe se si eseguissero le macro singolarmente.
Ad esempio, se la macro con comportamento anomalo è la terza della serie da eseguire, controlla le prime due macro per vedere cosa stanno facendo. Cambiano le celle selezionate? Cambiano il foglio di lavoro attivo? Cambiano le condizioni che si aspetta la terza macro? Una di queste attività potrebbe causare il malfunzionamento della terza macro.
È il secondo suggerimento, relativo al foglio di lavoro attivo, lo scenario più probabile. Quando si esegue la macro individualmente, è probabile che venga eseguita con un particolare foglio di lavoro attivo. Le altre macro, tuttavia, possono modificare il foglio di lavoro attivo in uno diverso e quel foglio di lavoro diverso potrebbe essere quello a cui è stata applicata la protezione.
La soluzione è controllare ogni macro per assicurarsi che salvi le informazioni sulla posizione (foglio di lavoro, cella attiva, celle selezionate, ecc.) prima di apportare modifiche a una di queste. Una volta salvati, è facile ripristinarli alla fine della macro.
Se il problema persiste, potrebbe essere necessario eseguire un po’ di debug. Nella macro “EseguiTutte”, utilizza l’editor VBA per stabilire un punto di interruzione sulla riga che chiama la macro in errore. È quindi possibile utilizzare il comando “Esegui istruzione” per accedere alla macro ed esaminare dove si verifica l’errore. Presta particolare attenzione al foglio di lavoro e alle celle che la macro sta cercando di modificare, quindi vedi se riesci a capire cosa sta succedendo con le macro precedenti per portare a quel foglio di lavoro e celle. Puoi utilizzare una delle seguenti righe nella finestra Immediata per vedere dove ti trovi:
? ActiveSheet.Name
? ActiveCell.Address
Rintracciare questi tipi di errori può essere una sfida, ma la luce alla fine del tunnel è che ti ritroverai con una macro “EseguiTutte” perfettamente funzionante che potrà farti risparmiare molto tempo.