Memoria di memory di Excel durante l'importzione ed esportzione di dati di file di text

Ho un programma excel con più userforms destinato alla creazione di file di text dai dati di un foglio master, nonché l'importzione di dati in più fogli e per la creazione di grafici dai dati importti.

Ho avuto problemi di perdita di memory e ho solo fatto in modo che tutti gli oggetti siano impostati a nulla prima che finiscano le subfunctions . Questo non sembrava aiutare.

Sembra che l'utilizzo della memory rimane alta dopo che tutte le funzioni siano eseguite in esecuzione e diventano progressivamente più lente, più spesso vengono eseguite.

Sospetto che la perdita di memory può essere il risultato di uno dei seguenti:

  1. Utilizzo del metodo TextToColumn durante l'importzione dei dati. Non è sicuro se questo accumula la memory dopo la fine della function.

Il codice ha il seguente aspetto:

      Set Temp = Workbooks.Open(FileLocation) With ThisWorkbook.Sheets(ShtName) Temp.Sheets(1).Cells.Copy .Cells .Columns(1).TextToColumns Destination:=.Range("A1"), _ DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=True, _ Space:=True, _ TrailingMinusNumbers:=True .Columns(1).Delete Temp.Close SaveChanges:=False End With Set Temp = Nothing TextQualifier: = xlDoubleQuote, _  Set Temp = Workbooks.Open(FileLocation) With ThisWorkbook.Sheets(ShtName) Temp.Sheets(1).Cells.Copy .Cells .Columns(1).TextToColumns Destination:=.Range("A1"), _ DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=True, _ Space:=True, _ TrailingMinusNumbers:=True .Columns(1).Delete Temp.Close SaveChanges:=False End With Set Temp = Nothing 
    1. Creazione di arrays di dati (circa 1 x 60) e loro scrittura in file di text. Non sappiamo anche se questo si cancella dopo la fine della function.

       DataList = Application.Transpose( _ Application.Transpose( _ .Range(.Cells(R, Lines_C_datastart), _ .Cells(R, Lines_C_dataend)))) If SheetWriter(ShtName, DataList()) Then SheetCreator = True 
    2. Variabili globali. Ho creato alcune funzioni corte per comportrsi come costanti globali, ma variano da due valori a seconda di una particolare bandiera. In questi I Set il valore di return della function a un valore.

    Mi chiedo se questo provoca problemi di memory, poiché non c'è alcuna occasione per riportrlo a Nothing . Sembrano così e ce ne sono molti:

      Function INPUT_FOLDERNAME() As String Select Case SIMTYPE_KEY Case T_SIMTYPE_A: INPUT_FOLDERNAME = "input_files_A" Case T_SIMTYPE_B: INPUT_FOLDERNAME = "input_files_B" End Select End Function Some of them are ListBox object functions that I made just for convenience in working with the names (not having to have the module name included) and I'm thinking these may pose a problem: Function LINES_BOX() As MSForms.ListBox Set LINES_BOX = Exporter.LINES_BOX End Function (This way, I just use LINES_BOX anywhere in the project instead of Exporter.LINES_BOX.) If anyone can see a particular issue that may be contributing to memory leak, or knows what the common causes are, any help would be appreciated. 

    Ho avuto lo stesso problema. Ho scritto un piccolo codice di prova in VBA che ha aperto e poi chiuso centinaia di altri piccoli file Excel. Utilizzando il Task Manager, ho trovato Excel che mangia tonnellate di spazio.

    Sono stato in grado di risolvere il problema in Excel 2010 aggiungendo una chiamata doEvents dopo la chiusura di ciascun file.