2017-05-05 98 views
0

我有一个VBA宏代码。其主要目的是将数据从工作簿复制到另一个工作簿;只是行的变化。该宏很快,直到我在目标工作表上做了一些条件格式化。VBA宏运行时关闭“一切”

而我的问题是,是否有任何方法来禁用宏在运行时在Excel中的每一边操作?现在我禁用这些:

Application.ScreenUpdating = False 
Application.DisplayAlerts = False 
Application.EnableEvents = False 

但我认为我可以关闭更多,使其更快。有什么建议么?

+1

'application.Calculation = xlCalculationManual' – YowE3K

+0

什么@ YowE3K说,只记得用'Application.Calculation = xlAutomatic' – Jeremy

+1

条件格式增加了工作簿的大小极大,如果这将是更要重新开启您的宏一次在循环中添加一行。如果关闭计算并不能阻止Excel进行所有计算并记录与格式有关的所有数据,则可以尝试一次性粘贴大块数据,或者更好地,在完成粘贴后应用条件格式,或者仍然更好的办法是不用条件格式化,并使用VBA来应用你想要的格式。 – Variatus

回答

1

你可以有标准的模块在以下两个代码...

Sub TurnEverythingOff() 
With Application 
    .Calculation = xlCalculationManual 
    .EnableEvents = False 
    .DisplayAlerts = False 
    .ScreenUpdating = False 
End With 
End Sub 

Sub TurnEverythingOn() 
With Application 
    .Calculation = xlCalculationAutomatic 
    .EnableEvents = True 
    .DisplayAlerts = True 
    .ScreenUpdating = True 
End With 
End Sub 

然后你就可以打电话给他们在你的子程序中像下面...

Sub YourMacro() 
'variable declaration section 

TurnEverythingOff 
On Error GoTo Skip 'if an error occurs, this makes sure that everything is turned on back 
'other stuff here 

Skip: 
TurnEverythingOn 
End Sub 

至于有条件格式化,请确保您不将它应用于未使用的范围,即不在条件格式公式中引用整行或整列。换句话说,将其限制在表单上的数据范围内。