我有一个包含多个userforms
的Excel程序,用于从主工作表中创建文本文件,以及将数据导入多个其他工作表以及从导入的数据创建图表。
我一直遇到内存泄漏问题,并确保在subfunctions
结束之前所有对象都设置为空。这似乎没有帮助。
在所有功能完成运行后,内存使用率似乎保持很高,并且运行的频率越来越慢。
我怀疑内存泄漏可能是以下原因之一:
TextToColumn
方法。不确定这是否在函数完成后插入内存。 代码如下所示:
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 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
全球变量。我创建了一些简短的函数来表现为全局常量,但它们在两个值之间变化,具体取决于特定的标志。在这些I Set
中,函数将值返回值。
我想知道这是否会导致内存问题,因为没有机会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.
答案 0 :(得分:-1)
我有同样的问题。我在VBA中编写了一些测试代码,打开后关闭了数百个其他小型Excel文件。使用任务管理器,我发现Excel占用了大量的空间。
我可以通过在关闭每个文件后添加doEvents
调用来解决Excel 2010中的问题。