宏打开许多文件并偶尔发生崩溃

时间:2014-05-12 21:23:15

标签: excel vba excel-vba

我目前正在使用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次崩溃一次,没有警告或模式。

我想知道是否存在此类问题的常见原因,是否与内存问题有关,或者是否有解决方案来处理它。

2 个答案:

答案 0 :(得分:1)

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

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

如果这些是简单的文本文件,那么您应该考虑使用TextStream Object之类的东西来解析它们。确保您引用Microsoft Scripting Runtime库(在vba Tools - > References中并检查“Microsoft Scripting Runtime”)

答案 1 :(得分:1)

您的问题似乎是导入的信息对于Excel来说太大而无法管理可用内存,很可能是错误是#Excel; Excel无法使用可用资源完成此任务。选择较少的数据或关闭其他应用程序。"。

在导入优化的每个文件之间可以尝试做的一件事是保存主工作簿,关闭它并再次打开它。这样,Excel将刷新用于传输值的内存,并且当您再次打开主工作簿时将占用更少的内存。