2016-11-10 203 views
0

我在删除列的代码速度方面遇到问题。下面的代码需要5秒钟才能运行,如果我在运行之前保存文档,那么它只需要1秒。节省不是很多,但我有一台体面的计算机,其他运行此表的用户基本上都在瘦客户端上,而且我有更多的代码可以运行。另外,当工作簿完成时,我无法保存,因为它被用作模板并在完成时保存为新的工作簿。具有数据的行数是〜49,000,我已经尝试过,没有ClearContentsExcel VBA删除列速度慢,除非先保存文档

有没有什么办法可以加速而不必先保存文件?

Sub GenerateOperations() 

With Application 
    .ScreenUpdating = False 
    .DisplayAlerts = False 
    .EnableEvents = False 
    .CutCopyMode = False 
End With 

Dim OpSheet As Worksheet 

Set OpSheet = Sheet3 

Application.Calculation = xlCalculationManual 
OpSheet.Range("A:C,E:G,L:Q").ClearContents 
OpSheet.Range("A:C,E:G,L:Q").Delete xlShiftToLeft 
Application.Calculation = xlCalculationAutomatic 

With Application 
    .ScreenUpdating = True 
    .DisplayAlerts = True 
    .EnableEvents = True 
End With 

End Sub 

回答

0

我发现通过查找最后一行并且只删除代码几乎同时运行的列的那一部分,工作代码如下所示。

Sub GenerateOperations() 

With Application 
    .ScreenUpdating = False 
    .DisplayAlerts = False 
    .EnableEvents = False 
    .CutCopyMode = False 
End With 

Dim OpSheet As Worksheet 

Set OpSheet = Sheet3 

With OpSheet 
    LastRow = .UsedRange.Rows.Count 
    .Range("A1:C" & LastRow & ",E1:G" & LastRow & ",L1:Q" & LastRow).Delete xlShiftToLeft 
End With 

With Application 
    .ScreenUpdating = True 
    .DisplayAlerts = True 
    .EnableEvents = True 
End With 

End Sub 
0

您是否尝试过没有这个位:.ScreenUpdating = True

+0

他为什么要关闭它?强烈建议关闭屏幕更新,以提高性能 –

+0

这不会加快它 – Rdster

+0

是关闭它加快了速度。根据我的经验重新开启它是不必要的,如果之后立即调用另一个子程序,则可能会减慢代码。 – Nick