我需要将处理过的数据从主文件导出到大量的“.xlsx”输出文件中。在主文件中,我运行VBA代码重复以下操作:1)。插入新工作表。 2)。将处理后的输出数据放入新插入的工作表中。 3)。将工作表移动到新工作簿并保存该工作簿。
在以这种方式导出2400多个工作表之后,Excel会显示一条错误消息,提到“没有足够的内存来完成此操作”,并建议使用64位Excel。
我改为64位Excel。在生成或多或少相同数量的输出文件之后出现相同的消息。
由于64位软件允许更大的内存空间,如果64位版本和32位版本在同一进度点耗尽内存,在我看来问题可能不是由正常的内存使用造成的。
可能是因为重复调用fopen()而不调用C中的fclose()。
我的代码的骨架就像:
Cur_Path = ActiveWorkbook.Path
Application.ScreenUpdating = False
For r = 12 To 4653
' Add Blank sheet
Set ws = Sheets.Add(After:=Sheets(Sheets.Count))
' Export Sheet
Export_fname = Cur_Path & "\" & ws.Name & ".xlsx"
ws.Move
ActiveWorkbook.SaveAs Filename:=Export_fname, FileFormat _
:=xlOpenXMLWorkbook, CreateBackup:=False
ActiveWindow.Close
Next r
Application.ScreenUpdating = True
调试器显示运行“ws.Move”行时出现问题。
有谁请让我知道我的代码有什么问题,或建议一个解决方案来解决(看似)2433工作表限制?
这可能更好 - 每个工作簿只有1张,没有一个存储在原书中。 您还没有说过如何将处理后的数据放在工作表上,所以我只是用数据填充了一些单元格。
Sub Test1()
Dim Cur_Path As String
Dim r As Long
Dim wrkBk As Workbook
Dim wrkSht As Worksheet
Cur_Path = ThisWorkbook.Path
For r = 12 To 4653
Set wrkBk = Workbooks.Add(xlWBATWorksheet) 'Create workbook with 1 sheet.
Set wrkSht = wrkBk.Worksheets(1) 'Set reference to worksheet.
With wrkSht
.Name = wrkSht.Name & " - " & r 'Ensure a unique name.
'Populate the sheet with some data.
.Range("A1") = wrkSht.Name
.Range("B1:D1") = Array(ThisWorkbook.Name, wrkBk.Name, Cur_Path)
End With
wrkBk.SaveAs Filename:=Cur_Path & "\" & wrkSht.Name & ".xlsx", _
FileFormat:=xlOpenXMLWorkbook
wrkBk.Close
Next r
End Sub