Excel VBA:内存超过第二次导入的限制

时间:2017-04-26 21:40:32

标签: excel vba excel-vba out-of-memory

我正在广泛使用32位2013 Excel和VBA。我已禁用硬件图形加速和COM加载项,但我仍然在努力解决以下问题:

我正在导入另一个大工作簿的内容,在单元格上格式化但没有公式(~3mb Excel文件)到有问题的Excel工作簿中。在第一次尝试时 - 尚未导入内容 - 导入成功。我通过VBA导入内容,类似于以下代码:

 Application.Workbooks(F_Home).Activate
 Workbooks(F_Home).Sheets(Sheet1).Visible = xlSheetVisible
 ...
 Application.Workbooks(F_Source).Activate
 Workbooks(F_Source).Sheets(S_Source).Cells.Copy Destination:=Workbooks(F_Home).Sheets(Sheet1).Cells
 Application.Workbooks(F_Home).Activate

F_Home是有问题的Excel工作簿,F_Source是我们正在导入的内容的工作簿。在第一次工作时这样做,然后我保存文件并关闭它,然后重新打开文件,然后尝试这是第二次。在我们第二次尝试导入内容时(当内容已经导入时)F_Home工作簿崩溃,内存不足(没有足够的内存来完成此操作......)在将F_Source内容复制到的行上F_Home。

使用Process Explorer我发现Excel进程通常在虚拟内存大小上运行大约600mb到700mb,但是当我们运行VBA脚本再次导入内容时,虚拟内存大小突然跳到4gb(这个不会发生在第一次,它停留在600mb - 700mb范围内)。我该怎么解决这个问题?在第二次导入内容之前,我无法执行诸如保存文件之类的解决方法,因为使用了文件上的时间戳,通过VBA保存文件会使一些用户感到困惑。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

复制并粘贴整张表并不是明智之举。我们假设你有来自" A1:Z99999"的数据。你可以做得更快。

Set S_Range = Workbooks(F_Source).Sheets(S_Source).Range("A1:Z99999")
Set H_Range = Workbooks(F_Home).Sheets(Sheet1).Range("A1:Z99999")

H_Range.Value = S_Range.Value

另请阅读why you should avoid selecting and activating in vba