在许多编译语言中,出于性能方面的原因,对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