Ciao Emilio,
devo iniziare a utilizzare Excel 2013, ma per lavoro utilizzo un file Excel 2003 con moltissime macro (non fatte da me): ho provato ad utilizzarlo sia in modalità compatibile sia convertendolo alla versione attuale,
ma si blocca e non funziona: qualcuno sarebbe cosi gentile da riuscire a trasformarlo.
Allego il file:
http://www.filedropper.com/ordineconanalisiv22vuoto
se pigi il tasto Analisi Totale in alto a destra, con Excel 2003 l'analisi dura 10/11 minuti, con Excel 2013 si blocca e chiude e riapre il file, o sta per ore senza concludersi mai.
Che il codice sia lentissimo non mi sorprende affatto! È veramente molto tempo che non ho avuto la disgrazia di vedere un esempio di spaghetti code, così ampio e così inestricabilmente intrecciato e ripetitivo! So che tu non hai scritto il codice ma, nella
mia modesta opione, l'autore dovrebbe spendere tutta l'eternità sospesa con le piante nude dei piedi sopra i carboni ardenti dell'inferno!
Non saprei dove cominciare con la mia critica del codice. Tuttavia, per darti solo un assaggio di ciò che trovo problematico, considera, come un piccolo esempio, il seguente scenario. Ci sono:
- 17 fogli, ognuno di quali comprende diverse macro, sia codice di evento che codice che avrebbe dovuto meglio trovarsi in un modulo di codice standard
- 14 moduli di codice pieno di codice
- 5 Userform, ognuna piena fino àllorlo di codice ...
Non me ne lamento la quantità di codice ma piuttosto il modo in cui, a mio parere, spesso ripetutamente ed inutilemente, tale codice avvia e riavvia sia altro codice che se stesso.
Solo a titolo di esempio, la procedura CommandButton1_Click nel modulo di codice del foglio
Ordine esegue, tra molto altro, le seguenti azioni:
- Chiama una macro (Cancella_Tutto sul foglio Statisiche) per cancellare oltre 65.000 righe su ciascuno di cinque fogli, ordina, gestisce e formatta una database di oltre 25.000 righe su quel foglio
- Chiama un'altra macro(ToggleButton1_Click sul foglio Statisiche) per inserire oltre 25.000 formule e poi convertirle in valori
- Mostra tre Userform
- Nasconde cinque Userform, ognuna quattro volte e, solitamente inutilmente in quanto non sono nè visibili ne aperte!
- [...]
- E così via.
Aggiungerei che una macro, ossia la routine Workbook_Open, che viene avviata automaticamente all'apertura del file, apre 11 fogli, l'uno dopo l'altro, e, di conseguenza, mostra o nasconda diverse Userform circa 60 volte e, alla apertura
di ogni foglio ed ogni Userform, esegue il codice del foglio/Userform!!
Se fosse per me, non accetterei mai che un codice richiedesse un tempo di esecuzione di
10/11 minuti
Comunque, non mi soprende che
con Excel 2013 si blocca e chiude e riapre il file
e riapre il file, o sta per ore senza concludersi mai.
A questo proposito farei l'osservazione che diverse versioni, sia di Excel che il sistema operativo, sono più o meno tollerante di alcuni problemi rispetto alle versioni precedenti o successive. Nel caso del tuo workbook, credo sia molto possibile che ci
sia un elemento di corruzione, sia del workbook che il codice VBA.
Quindi vorrei suggerire i seguenti passi:
- Scarica e avvia il componente aggiuntivo COM Excel VBA Code Cleaner di Rob Bovey
- Salva, chiudi e riapri il file
- Se il problema persiste, crea un nuovo workbook, importando i moduli di codice, i
fogli, e le Userform, non dimenticando il codice nel modulo di codice dell'oggetto
ThisWorkbook (Questa_cartella_di_lavoro per Excel 2013)
- Riavvia l'addin Excel VBA Code Cleanerper il nuovo file
- Salva, chiudi e riapri il nuovo file.
Purtroppo, mentre in questo modo potresti forse risolvere la questione dei problemi indicati da te con Excel 2013, credo che i problemi di prestazione siano inerenti e dovuto in gran misura al modo in cui sia stato scritto il codice.
In effetti, credo che la vera soluzione ai problemi di prestazione richieda che il codice sia globalmente revisionato e riscritto.
===
Regards,
Norman
