2011-12-07 24 views
8

在Excel VBA中,將Debug.Print指令留在「生產」中的代碼中是否是一種好的做法?當出現問題時,在用戶的機器上實時調試工作表非常有用。當Visual Studio關閉時會影響性能嗎?如果沒有,你會建議什麼?將「Debug.Print」指令留在「生產」中的代碼中是否是一種好的做法?

+0

你說 「的Visual Studio」,但你說的是VBA,對不對?你的意思是VBE嗎? – aevanko

+0

啊,是的,我想我只是明白現在人們稱之爲VBE ...是的,我猜是這樣:) [ALT + F11] – Jerome

+0

1)如果重要的是捕捉用戶在出錯時所做的事情,一個交易日誌將會是一個更好的選擇。每次運行或每天啓動一個新文件;刪除任何超過48小時。是的,有性能成本,但你會如何衡量。 2)Visual Studio是MS專業語言的開發環境。 VB 2010比VBA/VBE快數百倍,並且擁有數千個很酷的設施。如果您想使用工作表,您可以從中訪問Excel。 –

回答

21

Debug.Print指令DO的性能成本很低。所以我會避免它們執行數十億次的循環。除了這些情況,我認爲可以保留它們。
您也可以將條件編譯指令(#if)與編譯器常量(#const)結合使用以在不影響性能的情況下全局啓用/禁用它們。

#CONST developMode = True 

sub Xyz 
    #If developMode Then 
    Debug.Print "something" 
    #End If 
End Sub 
+2

@iDevelop +1每天學習新東西 - 沒有意識到Excel支持條件編譯!謝謝。 – dash

+0

這確實看起來很有趣,謝謝! – Jerome

+0

清除足夠的空間+1 :)。順便說一句,條件編譯(和一些有用的其他東西)在這個有趣的線程討論:http://stackoverflow.com/questions/1070863/hidden-features-of-vba – JMax

4

我通常有兩個版本;沒有調試的刺激,並帶有調試。結合catchall錯誤處理程序記錄,意味着如果用戶遇到問題,我可以將調試版本部署到他們,他們可以運行它。

我有一個宏,我運行該註釋掉debug.print語句,所以它不是一個真正的維護開銷。

一直運行調試版本的問題(以及Excel VBA通​​常不是性能問題)是您的應用程序不斷髮出不需要的信息。例如,在控制電子表格的環境中,這可以被看作是一件壞事。

在全局錯誤處理方面,你仍然需要你想在錯誤處理每一個功能上的錯誤GoTo語句可以,但是,管這些,以一個共同的功能:

Public Function HandleTheNastyErrors(E As ErrObject, ByVal writeLog As Boolean = True) 

    Select Case E.Number 

    Case xxx 

     ...specific error handling... 

    Case Else 
     ... Display a message to the user about how you dont know what happened....    
    End Select 

    If writeLog Then 

     ...Log Writing Code... 

    End If 

End Function 

然後,的OnError:

ErrorHandler: 
Call HandleTheNastyErrors(Err, True) 

展會做的伎倆

+0

你能評論你的「全部抓住」嗎?我真的不知道如何巧妙地處理錯誤,以及目前爲止的一般情況。謝謝 ! – Jerome

+0

@jeromeG你走了。希望能幫助到你。 – dash

+0

將錯誤對象自己傳遞給函數...這是一個有趣的想法。 –

相關問題