Мой макрос VBA Excel выдает «Ошибка времени выполнения« 7 »: недостаточно памяти»
В документе Excel содержится список из 5500 документов CSV на одном листе.Макрос просматривает этот список и для каждого: а) помещает свою информацию в сводный выходной лист;б) добавляет некоторые формулы;и c) переходит к следующему файлу.
После выполнения около 3000 из них сценарий обнаружил ошибку «Недостаточно памяти».
Основная проблема заключается в том, что эта проблема сохраняется после сохранения файла.закрытие Excel полностью, повторное открытие Excel и даже перезагрузка компьютера.Я также использовал Paste-Special, чтобы избавиться от всех формул и заменить их значениями.Я также переключился на ручные вычисления.
Я хотел бы найти способ предотвратить возникновение этой ошибки.Как минимум, если это произойдет, я хотел бы иметь возможность сохранять, закрывать и повторно открывать файл и продолжать просматривать список из 3000 записей одновременно.
Я прочитал всепредыдущие вопросы и ответы об ошибках «Недостаточно памяти», но ни одна из них, похоже, не устраняет проблему после закрытия и повторного открытия.
Я публикую соответствующую часть своего кода ниже.Отладчик показывает, что ошибка произошла в строке: .Refresh BackgroundQuery: = False.Я использую Windows 10, Excel 2007. Любая помощь приветствуется.Спасибо!
Sub test()
Dim filename As String
Dim outputsheet As String
Dim output_lastrow As Integer
Application.EnableEvents = False
For rep = 2 To 5502
filename = Sheets("Import Files").Range("A" & rep).Value ‘this takes the form of C:\Users\...\filename1.csv
outputsheet = "Summary"
output_lastrow = Sheets(outputsheet).Range("D999999").End(xlUp).Row
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" + filename, Destination:=Sheets(outputsheet).Range("$A" & output_lastrow + 2))
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 437
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
output_lastrow = Sheets(outputsheet).Range("D999999").End(xlUp).Row + 1
Sheets(outputsheet).Range("A" & output_lastrow).Value = "Change"
Sheets(outputsheet).Range("B" & output_lastrow).Formula = "=R[-1]C"
Sheets(outputsheet).Range("C" & output_lastrow).Formula = "=R[-1]C"
Sheets(outputsheet).Range("C" & output_lastrow).AutoFill Destination:=Range("C" & output_lastrow & ":FP" & output_lastrow), Type:=xlFillDefault
End If
Dim wbconnection As WorkbookConnection
For Each wbconnection In ActiveWorkbook.Connections
If InStr(filename, wbconnection.Name) > 0 Then
wbconnection.Delete
End If
Next wbconnection
Next rep