2014-01-09 54 views
3

現在我正在編寫一個幾乎完全由VBA自動化驅動的Excel工作簿的複雜網絡,所以有很多宏正在寫入。應用程序方法的獨立子程序?

儘可能地嘗試並禁用屏幕更新,警報和事件。爲了節省一些時間和頭痛追蹤我可能已經啓用/禁用這些的地方,我寫了一個子程序,其中每個所需的設置都作爲參數傳入,因此您可以在一行中設置要啓用/禁用的內容的代碼(或者至少無論如何都是這個想法)。

這是一個子程序樣子:

Sub AppToggles(Optional ScrUpdating As Boolean = False, _ 
       Optional DispAlerts As Boolean = True, _ 
       Optional Events As Boolean = False) 

With Application  
    .ScreenUpdating = ScrUpdating 
    .DisplayAlerts = DispAlerts 
    .EnableEvents = Events 
End With  

End Sub 

Call AppToggles(True, True, True)把它從同一模塊中的其他各種子程序(或任何組合需要

問題是,子程序沒有按」 t似乎做任何事情,它是一個簡單的例程,它通過它告訴我什麼都沒有。關鍵字懸停在顯示我的每個開關沒有被設置爲傳遞的參數

我可以設置一個If s我想對每個人都有好評,但我很好奇我在哪裏掉下了軌道:P

+0

好問題。我可以複製這種行爲。我嘗試了一些東西,但只要使用變量就行不通。 –

回答

3

不要單步執行代碼......正常運行或通過F5運行它

您的例行工作適合我。

Sub TestMe() 
Call AppToggles(False, False, False) 
MsgBox "ScreenUpdating: " & Application.ScreenUpdating & vbCrLf & _ 
"DisplayAlerts: " & Application.DisplayAlerts & vbCrLf & _ 
"EnableEvents: " & Application.EnableEvents 
Call AppToggles(True, True, True) 
MsgBox "ScreenUpdating: " & Application.ScreenUpdating & vbCrLf & _ 
"DisplayAlerts: " & Application.DisplayAlerts & vbCrLf & _ 
"EnableEvents: " & Application.EnableEvents 
Call AppToggles(True, True, True) 
End Sub 
+0

你真棒,非常感謝你。這樣一個簡單的檢查,但它根本沒有發生在我身上! –

+1

沒問題。很好的例程! –

0

既然你聲明一切都是自動的,你是否有機會禁用Application.EnableEvents?我知道它有時會設置爲False,以防止BeforeSave在保存工作簿時啓動。

如果是這樣的話,只是操作ScreenUpdatingDisplayAlerts應該做的伎倆之前,將其設置爲True。如果需要,您可以恢復到False(或參考Events參數提供的值),然後設置所有內容。

+0

我正在嘗試這個,我更加困惑。當我單步執行代碼時,工具提示中的值似乎與我設置的手錶不匹配。 –