A me la macro da errore sulla riga
For j = 2 To Sheets("Foglio2").Range("A1", Range("A1").End(xlDown)).Rows.Count
che infatti e' logicamente sbagliata; la versione corretta e':
- Codice: Seleziona tutto
For j = 2 To Sheets("Foglio2").Range("A1", Sheets("Foglio2").Range("A1").End(xlDown)).Rows.Count
Ho controllato su un file che mi sono inventato, e la lentezza di esecuzione sta' soprattutto in quei messaggi inviati alla statusbar; comunque mi e' impossibile confrontare con XL2007.
Il mio suggerimento e' quindi di eliminarli totalmente (tutte le righe che contengono DisplayStatusBar e StatusBar): perderai l'indicazione di dove sei arrivato ma arriverai in fondo mooolto prima.
Visto che la macro contiene numerose formattazioni, puo' anche essere utile inserire
Application.ScreenUpdating = False a inizio macro e
Application.ScreenUpdating = True in fondo, prima del msgbox
La macro non e' scritta avendo in mente la riduzione dei tempi di esecuzione (vedasi i continui accessi ai dati sui fogli); inoltre i tempi aumentano col quadrato della lunghezza degli elenchi (se raddoppia, il tempo quadruplica).
Se pubblichi un file a cui la macro si applica si puo' provare una riscrittura che evita il continuo accesso ai dati del foglio; in questi casi i tempi si riducono drasticamente.
Ciao