vba excel 宏使用过多内存(select.insert 似乎是原因)

vba excel macro using too much memory (select.insert seems to be the cause)

由于内存使用过多,我遇到了一个无法结束的宏。

我有一个特定的行似乎对此负责:

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

我在调试中逐行运行了宏,所以当我进入 If/Or 块然后到 EndIf 我看到 windows 任务管理器中的内存使用量在跳跃。

你有关于这个的 explanation/suggestion 吗?

非常感谢您的帮助。 BR, 马西莫

在我什至努力寻找一个优雅的解决方案之前,我会先优化宏以刷新公式和屏幕:

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

请不要忘记在完成子程序后将它们恢复为原始值。

这应该可以防止在插入期间进行任何重新计算,并防止屏幕进行不必要的自我更新。这实际上可能会立即解决您的问题。

现在,对于一个优雅的解决方案,我们需要查看您的整个代码并查看您正在努力实现的目标,因为很可能您正在移动大量包含数据和公式的列,因此 Excel 必须处理一个很多在内存中将它们移动到右边。

W/o 看到你的代码我可能会:

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