gpt4 book ai didi

vba - MS Access 运行时中的 Debug.Assert 行为

转载 作者:行者123 更新时间:2023-12-03 04:21:27 26 4
gpt4 key购买 nike

在许多编译语言中,出于性能原因,对 Debug.Assert 或其等效项的调用被排除在编译的生产代码之外。但是,对 Debug.Assert 的调用似乎仍然在 MS Access 应用程序的 /runtime 版本中执行。

为了测试这一点,我将以下内容添加到我的启动表单中:

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,但单击 [No] 不会停止程序执行。 VBA 似乎执行了该行但忽略了结果。这并不奇怪,但却是不幸的。

我希望 Access 能够完全跳过 Debug.Assert 行。这意味着必须注意不要使用会损害性能的 Debug.Assert 行,例如:

Debug.Assert DCount("*", "SomeHugeTable", "NonIndexedField='prepare to wait!'") = 0

此行为是否在某处记录? Access 中的官方文档似乎是从 VB6 中逐字提取的:

Assert invocations work only within the development environment. When the module is compiled into an executable, the method calls on the Debug object are omitted.

显然,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

最佳答案

我不知道它是否更适合您的特定用例,但如果您希望在与应用程序无关的 VBA 代码中执行此操作,则有更好的替代方案。 VBA有Conditional Compilation 。条件复杂度常量可以在模块级别声明,但在这种情况下,最好在项目级别声明它。

在菜单栏上,单击工具>>项目属性,然后在“条件编译参数:”字段中键入 DEBUGMODE = 1 。 (注意:DEBUG 不起作用,因为它是关键字。)

Project Properties Dialog Window

现在您可以将所有 Debug.Assert() 语句包装在这样的代码中。

#If DEBUGMODE Then
Debug.Assert False
#End If

当您准备好部署项目时,只需返回“项目属性”对话框并将参数更改为 DEBUGMODE = 0

其他信息:

关于vba - MS Access 运行时中的 Debug.Assert 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27049107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com