VBA的Excelmacros使用太多的内存(select.insert似乎是原因)

我正在苦苦挣扎,因为内存使用量太大,无法完成。

我有一个具体的行似乎是负责这个:

Selection.Insert Shift:= xlToRight

这是在一个while循环和一个if / else语句像这样:

While SearchRow < lastRow If StrComp(...) = 0 Then ... End If If StrComp(...) = 0 Then ... End If If StrComp(...) = 0 _ Or StrComp(...) = 0 _ Or StrComp(...) = 0 Then ActiveSheet.Cells(SearchRow, 1).EntireRow.Delete Else ThisWorkbook.Sheets(...).Cells(SearchRow, 1).Select Selection.Insert Shift:=xlToRight End If Wend 

我已经在debugging行中运行macros,所以当我进入If / Or块,然后到EndIf我看到在Windows跳转的任务pipe理器中的内存使用情况。

你有什么解释/build议呢?

非常感谢您的帮助。 BR,Massimo

在我find一个优雅的解决scheme之前,我会为了刷新公式和屏幕而开始优化macros:

 Application.Calculation = xlCalculationManual Application.ScreenUpdating = False 

请不要忘记在完成子工作后将其恢复为原始值。

这应该可以防止在插入过程中进行重新计算,并防止屏幕不必要地自行更新。 这实际上可以马上解决你的问题。

现在,为了一个优雅的解决scheme,我们需要看到你的整个代码,看看你正在努力实现,因为很可能你正在移动大量的数据和公式的列,因此Excel必须在内存中处理很多,以将其移动到右侧。

没有看到你的代码我可能会:

  1. 想想或重写它,以防止任何Shift
  2. 修改代码来执行插入,而不是从右到左进行插入(以限制需要移动的列数)
  3. 先插入许多列并隐藏它们。 然后在代码中,当需要而不是插入它们时,您将取消隐藏其中一个隐藏列 – 最有效