macros打开许多文件和偶尔崩溃

我目前正在使用一个VBAmacros,从大量的Excel文件复制数据到工作簿; 有时超过100个文件取决于用户的要求。 该macros为复制的每个文件创build新的工作表。

用于复制文件的函数以这种方式写在循环中:

Function ImportOneFile(SimName As String) As Integer Dim Temp As Workbook, FileLocation As String, Fld As String, FName As String, ShtName As String Fld = SIM_FOLDERNAME: FName = OUTPUT_FILENAME FileLocation = ThisWorkbook.Path & "\" & Fld & "\" & SimName & "\" & FName If Len(Dir(FileLocation)) = 0 Then ImportOneFile = 0 Exit Function End If ShtName = SimName '// Prepare worksheet for import If Not IsWorksheet(ShtName) Then AddSheetAtEnd (ShtName) 'Sheets.Add(After:=Sheets(Sheets.Count)).Name = ShtName Else WipeSheet (ShtName) 'RemoveChart (ShtName) End If '// Copy text file into sheet 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 If SIMTYPE_KEY = T_SIMTYPE_P Then .Rows(WorksheetFunction.CountA(.Columns(1))).Delete Temp.Close SaveChanges:=False End With ImportOneFile = 1 End Function 

它在处理较less数量的文件时运行稳健, 例如less于30。 但是,当函数运行的文件数量较多时,会偶尔崩溃,通常每5次中有1次,没有任何警告或模式。

我想知道这类问题是否有共同的原因,是否与内存问题有关,或者是否有解决scheme。

这个问题很可能与内存pipe理有关。 Excel对象(如工作簿,工作表,单元格等)很重,因为它们不仅包含您的数据,还包含有关格式化等的所有信息。

我注意到你正在使用Range.TextToColumns方法:

如果这些是简单的文本文件,那么你应该考虑使用类似于TextStream对象来parsing它们。 确保您参考了Microsoft脚本运行时库(在vba Tools – > References中并选中“Microsoft Scripting Runtime”)

您的问题似乎是导入的信息变得太大,Excel无法pipe理可用内存,很可能是因为“Excel无法用可用资源完成此任务,select更less的数据或closures其他应用程序”。

您可以尝试在导入的每个文件之间进行优化的一件事是保存您的主工作簿,closures它并再次打开它。 通过这种方式,Excel将刷新用于传输值的内存,而当您再次打开主工作簿时,将占用更less的内存。