在許多編譯語言中,出於性能方面的原因,對Debug.Assert
或其等價物的調用被排除在編譯的生產代碼之外。但是,對Debug.Assert的調用似乎仍然在/runtime
版本的MS Access應用程序中執行。MS Access運行時中的Debug.Assert行爲
爲了測試這一點,我添加了以下到我的啓動形式:
Private Sub Form_Load()
Debug.Assert UserOK()
End Sub
Function UserOK() As Boolean
UserOK = MsgBox("Is everything OK?", vbYesNo, "Test Debug.Assert") = vbYes
End Function
當我運行這在開發環境中,點擊[否]的MSGBOX,在Debug.Assert的執行中斷行(如我所料)。
當我使用/runtime
開關(使用完整版本的MS Access 2002)運行相同的代碼時,我仍然看到MsgBox,但單擊[否]不會停止程序執行。看來VBA執行該行,但忽略了結果。這並不奇怪,但是很不幸。
我希望Access會完全跳過Debug.Assert行。這意味着,一個必須小心,不要使用會傷害性能Debug.Assert的線路,例如:
Debug.Assert DCount("*", "SomeHugeTable", "NonIndexedField='prepare to wait!'") = 0
這種行爲記錄的地方? Access中的官方文檔似乎從VB6逐字逐句刪除:
斷言調用僅在開發環境中起作用。當模塊被編譯爲可執行文件時,Debug對象上的方法調用被省略。
顯然,MS Access應用程序無法編譯爲可執行文件。 是否有比以下解決方法更好的替代方案?
Private Sub Form_Load()
If Not SysCmd(acSysCmdRuntime) Then Debug.Assert UserOK() 'check if Runtime
End Sub
Function UserOK() As Boolean
UserOK = MsgBox("Is everything OK?", vbYesNo, "Test Debug.Assert") = vbYes
End Function
我似乎無法找到鏈接,但MS最近開源了辦公文檔。你可能想要提交一個PR。 – RubberDuck 2015-11-25 16:22:51