Excel VBA: 第二次导入时内存超出限制

Excel VBA: Memory Exceeds Limits on Second Import

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

我正在将另一个大型工作簿的内容导入到有问题的 Excel 工作簿中,该工作簿在单元格上设置了格式但没有公式(~3mb 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 保存文件会使一些用户感到困惑。

感谢您的帮助。

复制并粘贴整个 sheet 不是明智的做法。假设您有来自 "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