2015-12-04 58 views
1

我一直在研究如何在Excel VBA中加速我的代碼,並且遇到以下有用的設置。我的問題是:是否可以將下列代碼行設置爲一個變量,我可以將它設置爲On或Off來激活整個列表?即像Excel VBA性能編碼設置

speedUpCode = On 

將設置所有的下方設置,如果它被設置爲OFF,將扭轉一切的下方爲True/xlCalculationAutomatic

With Application 
    .ScreenUpdating = False 
    .DisplayStatusBar = False 
    .Calculation = xlCalculationManual 
    .EnableEvents = False 
End With 
ActiveSheet.DisplayPageBreaks = False 'note this is a sheet-level setting 
+0

科林,歡迎來到S.O.你可能想看看http://chat.stackexchange.com/rooms/14929/vba-rubberducking哪裏有很多人討論修補VBA的後端。 – Chrismas007

+1

大多數人只需調用包含此代碼的子。您可以將true或false作爲參數傳遞,並將其打開/關閉。 – user1274820

+0

您可以將代碼包裝在SUB或FUNCTION中。您可以根據需要調用它。 –

回答

7

我用這個(很基本的):

Sub GoFast(Optional bYesNo As Boolean = True) 
    With Application 
     .ScreenUpdating = Not bYesNo 
     .Calculation = IIf(bYesNo, xlCalculationManual, xlCalculationAutomatic) 
    End With 
End Sub 

用電話或True沒有參數來加快速度,然後用False復位。

以上有關可能捕獲各種設置的當前狀態的註釋,以便您可以恢復到「原始」狀態,並且並非所有設置總是適合更新,具體取決於您所做的是所有值得考慮。

+0

雖然你說它是基本的,但是這可以幫助我解決問題,因爲我正在嘗試瞭解佈局代碼的最佳方法。 –

3

您可以使用一個函數來做到這一點像所以......

Function speedUpCode(sStatus As String) 

    If sStatus = "On" Then 
     With Application 
     .ScreenUpdating = False 
     .DisplayStatusBar = False 
     .Calculation = xlCalculationManual 
     .EnableEvents = False 
     End With 

    ActiveSheet.DisplayPageBreaks = False 'note this is a sheet-level setting 

Else if sStatus = "Off" then 

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

    ActiveSheet.DisplayPageBreaks = True 'note this is a sheet-level setting 

End Function 

然後你可以用這些來打開和關閉

speedUpCode "On" 
    speedUpCode "Off" 

但是,請記住,您正在打開和關閉設置 - 您應該在更改它們之前檢查這些設置的狀態,以便您可以將它們重置爲原始設置,而不是再次將它們全部關閉。 您可以這是否與靜態變量

+0

雖然在技術上這是有效的,但如果'speedUpCode'爲'On',它將在'Worksheet_Change'事件中斷。代碼不會按預期的那樣執行。 –

+0

我只是包括他想改變的設置,如果你想加快代碼的速度,你可能不會在那個時候尋找用戶交互 –

+2

也許......但它是一個*非常需要的警告*在OP沒有線索可能會產生什麼影響。 –