2012-04-26 23 views
5

Stavo eseguendo il debug di un problema menzionato in alcune altre * domande su SO e ho notato uno strano comportamento durante il processo di debug.Excel VBA Tecniche di debug "fuori memoria"

Comportamento: Errore di memoria insufficiente durante l'incollamento di formule complesse. Solo circa la metà delle 20.000 righe che sto iterating ha le formule incollate prima dell'errore. Commentato virtualmente tutto il codice, l'errore va via. Decifra il codice in modo incrementale nella speranza di scoprire la specifica sezione di codice che lo sta causando. Finisci per decommentare tutto il codice e smettere di sperimentare il bug!

Ciò significa che lo stesso identico codice funzionava bene nella stessa istanza di Excel, e il suo fissaggio richiedeva solo l'esecuzione di varie versioni più leggere del codice prima di tornare alla versione originale. Cosa potrebbe causare questo?

+2

Vi suggerisco di provare il [pulitore del codice] di Ron Bovey (http://www.appspro.com/Utilities/CodeCleaner.htm) - revisiona il codice esportandolo, cancellandolo e quindi reinserendo i moduli esportati – brettdj

+0

+ 1 Sono d'accordo con brettdj. Code Cleaner è veramente buono. Sono anche curioso di uno di questi esempi che ti sta dando l'errore ... –

+0

Grazie a @brettdj ma Code Cleaner non ha aiutato. È riuscito a portare il file .xla a 151k da 159k, il che è affascinante per me. – Trindaz

risposta

3

Supponendo che i dati su cui stavi lavorando fossero identici ogni volta, sembra che il tuo problema riguardasse l'ambiente - il problema potrebbe essere che il sistema operativo ha esaurito la memoria. In Excel 2007, la memoria utilizzabile per le formule e le cache pivot è stata aumentata a 2 gigabyte (GB), quindi non è questo il problema. Tuttavia, è ovviamente anche limitato dalla quantità di memoria disponibile sul sistema operativo in quel momento.

Il problema può essersi verificato perché al primo test, la memoria del sistema operativo disponibile era inferiore (da altri processi in esecuzione ... potrebbe persino essere stato spinto oltre il limite da programmi in background come il software antivirus che esegue una scansione) rispetto a quando hai eseguito la macro completa in un secondo momento. Vorrei provare a eseguire la tua macro con il Task Manager aperto per vedere se ti stai avvicinando alla memoria fisica. Inoltre, supponendo che tu sia in Excel 2007 o versioni successive, controlla la quantità di memoria utilizzata da Excel e verifica se sei vicino a un limite di 2 GB. Dubito che questo sarebbe il problema, ma vale almeno il doppio controllo. Inoltre, come ha detto Zairja, assicurati di impostare il calcolo su manuale all'inizio.

Lei ha detto che si sta utilizzando formule complesse ... leggi questo articolo su Improving Performance in Excel

C'è un sacco di informazioni utili in questo articolo che probabilmente aiutare a semplificare la macro.

È utile?