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

时间:2015-01-16 15:16:59

标签: excel vba memory selection

由于内存使用过多,我正在努力使用无法达到目标的宏。

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

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

我在调试lineby行中运行了宏,所以当我进入If / Or块然后到EndIf时,我看到Windows跳转的任务管理器中的内存使用情况。

你对此有任何解释/建议吗?

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

1 个答案:

答案 0 :(得分:1)

在我找到一个优雅的解决方案之前,我会开始优化宏来刷新公式和屏幕:

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

完成使用后,请不要忘记将它们恢复为原始值。

这样可以防止在插入过程中重新计算,并防止屏幕不必要地自行更新。这可能会立即解决您的问题。

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

我可能会看到你的代码:

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