2017-05-05 91 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 

至於有條件格式化,請確保您不將它應用於未使用的範圍,即不在條件格式公式中引用整行或整列。換句話說,將其限制在表單上的數據範圍內。