导入和导出文本文件数据时出现Excel内存泄漏

时间:2015-08-21 21:40:22

标签: excel vba excel-vba memory-leaks

我有一个包含多个userforms的Excel程序,用于从主工作表中创建文本文件,以及将数据导入多个其他工作表以及从导入的数据创建图表。

我一直遇到内存泄漏问题,并确保在subfunctions结束之前所有对象都设置为空。这似乎没有帮助。

在所有功能完成运行后,内存使用率似乎保持很高,并且运行的频率越来越慢。

我怀疑内存泄漏可能是以下原因之一:

  1. 导入数据时使用TextToColumn方法。不确定这是否在函数完成后插入内存。
  2. 代码如下所示:

        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. 创建数据数组(大约1 x 60)并将其写入文本文件。也不确定在功能结束后是否清除。

      DataList = Application.Transpose( _
                 Application.Transpose( _
                   .Range(.Cells(R, Lines_C_datastart), _
                          .Cells(R, Lines_C_dataend)))) 
      If SheetWriter(ShtName, DataList()) Then SheetCreator = True
      
    2. 全球变量。我创建了一些简短的函数来表现为全局常量,但它们在两个值之间变化,具体取决于特定的标志。在这些I Set中,函数将值返回值。

    3. 我想知道这是否会导致内存问题,因为没有机会Set回到Nothing。他们看起来像这样,其中有很多:

          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.
      

1 个答案:

答案 0 :(得分:-1)

我有同样的问题。我在VBA中编写了一些测试代码,打开后关闭了数百个其他小型Excel文件。使用任务管理器,我发现Excel占用了大量的空间。

我可以通过在关闭每个文件后添加doEvents调用来解决Excel 2010中的问题。