我目前正在使用VBA宏将大量excel文件中的数据复制到工作簿中;有时超过100个文件,具体取决于用户的请求。宏为每个复制的文件创建新工作表。
用于复制文件的函数以这种方式写在循环中:
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
使用较少数量的文件时,它以强大的方式运行;例如,不到30。但是,当函数以较高数量的文件运行时,它会偶尔崩溃,通常每5次崩溃一次,没有警告或模式。
我想知道是否存在此类问题的常见原因,是否与内存问题有关,或者是否有解决方案来处理它。
答案 0 :(得分:1)
问题可能与内存管理有关。 Excel对象(如工作簿,工作表,单元格等)很重,因为它们不仅包含您的数据,还包含有关格式化等的所有信息。
我注意到你正在使用Range.TextToColumns方法:
如果这些是简单的文本文件,那么您应该考虑使用TextStream Object之类的东西来解析它们。确保您引用Microsoft Scripting Runtime库(在vba Tools - > References中并检查“Microsoft Scripting Runtime”)
答案 1 :(得分:1)
您的问题似乎是导入的信息对于Excel来说太大而无法管理可用内存,很可能是错误是#Excel; Excel无法使用可用资源完成此任务。选择较少的数据或关闭其他应用程序。"。
在导入优化的每个文件之间可以尝试做的一件事是保存主工作簿,关闭它并再次打开它。这样,Excel将刷新用于传输值的内存,并且当您再次打开主工作簿时将占用更少的内存。