【问题标题】:Excel animations running very slow after running Macro运行宏后 Excel 动画运行非常缓慢
【发布时间】:2019-05-13 08:30:30
【问题描述】:

根据标题,我正在记录一些非常简单的宏,它们应该从一个工作表复制数据,粘贴到另一个工作表,并对第二个工作表的行执行一些简单的操作。

但是,在运行宏(下面的代码)后,excel 变得非常无响应。 甚至滚动浏览文件也会变得很慢。

此外,使用此宏后 CPU 和内存使用率会飙升

我已经录制了宏来自动执行某些任务,但我从未经历过这种减速。

这部分代码将数据从一个工作表复制并粘贴到另一个工作表

Sub Banco_Creazione_Foglio()
'
' Creazione_Foglio_Banco Macro
'

'
Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets.Add(After:=ActiveSheet).Name = "Foglio Banco"
ActiveSheet.Paste
Range("A1").Select
End Sub

这部分代码删除了一些不相关的列。

Range("O4").Select
ActiveWindow.ScrollColumn = 11
ActiveWindow.ScrollColumn = 10
ActiveWindow.ScrollColumn = 9
ActiveWindow.ScrollColumn = 8
ActiveWindow.ScrollColumn = 7
ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 1
Columns("G:G").Select
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollColumn = 7
Range("G:G,P:P").Select
Range("P1").Activate
ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 4
Columns("G:Q").Select
Selection.Delete Shift:=xlToLeft
Columns("H:I").Select
Selection.Delete Shift:=xlToLeft
Columns("K:L").Select
Selection.Delete Shift:=xlToLeft
Columns("M:Y").Select
Selection.Delete Shift:=xlToLeft
Columns("N:N").Select
Selection.Delete Shift:=xlToLeft
ActiveWindow.ScrollColumn = 7
ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 1
Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
End Sub

【问题讨论】:

  • 嗨 nicola,首先删除代码中的每个 ActiveWindow.ScrollColumn = 4(这只会移动屏幕)并阅读 this 以避免出现 .Select.Activate,您的代码会更干净并且更快。认为您发布的内容不会降低您的计算机速度。
  • 嗨达米安,感谢您的回复。但是,我要说的是运行宏后工作簿本身很慢。宏本身运行平稳快速,特别是考虑到我的工作表非常小。
  • 可能是因为您正在复制繁重的公式,并且由于自动计算已打开而导致 Excel 变慢?尝试关闭计算。检查Application.Calculation property (Excel)。另外,我们可以看一个数据示例吗?这是所有的代码吗?任何事件编码?您是否在复制其他重物,例如图表或数据透视表?
  • 嗨,狐火。是的,这就是所有的代码。即使我怀疑这是原因,我也会尝试关闭计算。没有任何事件编码,我也没有粘贴大量数据,例如图表或数据透视表 目前我对共享数据没有信心,因为它是生产数据。

标签: excel vba


【解决方案1】:

这是你的代码清理了一些东西,如果它有帮助,试试吧:

Option Explicit
Sub Banco_Creazione_Foglio()
'
' Creazione_Foglio_Banco Macro
'

'
    Dim wsSource As Worksheet, wsPaste As Worksheet

    With Application
        .ScreenUpdating = False
        .Calculation = xlCalculationManual
        .EnableEvents = False
    End With

    Set wsSource = ActiveSheet
    Set wsPaste = ThisWorkbook.Sheets.Add(After:=wsSource)
    wsPaste.Name = "Foglio Banco"
    wsSource.UsedRange.Copy wsPaste.Range("A1") 'This is copying everything on your sheet, tell me if you just want to copy some delimited range.
    With wsPaste
        .Columns("G:Q").Delete Shift:=xlToLeft
        .Columns("H:I").Delete Shift:=xlToLeft
        .Columns("K:L").Delete Shift:=xlToLeft
        .Columns("M:Y").Delete Shift:=xlToLeft
        .Columns("N:N").Delete Shift:=xlToLeft
    End With

    With Application
        .ScreenUpdating = True
        .Calculation = xlCalculationAutomatic
        .EnableEvents = True
    End With

End Sub

【讨论】:

  • 很高兴它有帮助。研究如何避免使用 .Select.Activate 就像我在评论中告诉你的那样,你的代码将是这样的,而不是你发布的代码,并为你节省很多错误。
猜你喜欢
  • 2017-05-12
  • 1970-01-01
  • 1970-01-01
  • 2014-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多