vba - 为什么某些 VBA 错误不触发错误处理?

标签 vba ms-access error-handling

今天早上更新我的代码时,我出错了——我用字符串替换了一个函数,但忘记去掉后面的括号,导致代码无法运行。

但是,这并没有触发我的错误处理代码,所以它没有报告错误,我花了很长时间才通过单步执行代码找到它。

代码如下:

Private Sub Form_Close()

On Error GoTo ErrHandler

'Update to say the user is no longer logged in

        DoCmd.SetWarnings False
        DoCmd.OpenQuery "Last Logged Out"

'Backup data
If (strNameChecker <> "workshop.accdb") Then

        strBackupUser = Nz(GetFullName(), "default")
        strFriendlyNow = Replace(Now(), "/", "-")
        strFriendlyNow = Replace(strFriendlyNow, ":", "-")
        strNewFileName = "F:\Data\Central\Marketing\Databases\Prospects Database\Auto-Backups\TargetDBData - backed up by " & strBackupUser() & " on " & strFriendlyNow & ".mdb"
        BackupProspects "F:\Data\Central\Marketing\Databases\Prospects Database\TargetDBData.mdb", "" & strNewFileName & ""
        sSql = "INSERT INTO [Backup to Delete] ([Version Number]) SELECT '" & strNewFileName & "' AS Expr1;"
        DoCmd.RunSQL sSql


'Delete the temporary version of the front end.
        DoCmd.OpenQuery "Update - Version Shutdown"
        DoCmd.SetWarnings True
        Application.FollowHyperlink "F:\Data\Central\Marketing\Databases\Prospects Database\Prospects Database Shutdown.accdb"

End If

Exit Sub

ErrHandler:
DoCmd.SetWarnings True
MsgBox "The database has generated an error. Please contact the database administrator, quoting the following error message: '" & Err.Description & "'", vbCritical, "Database Error"

End Sub

错误是由代码中途 strBackupUser 之后的两个括号引起的 - 删除它们并且代码工作正常 - 但为什么这个错误不触发错误处理?

最佳答案

您的模块顶部似乎没有 Option Explicit。结果,所有字符串变量都将被静默声明为 Variant。我不确定编译器将如何处理表达式 strBackupUser(),我猜它会尝试某种可怕的后期绑定(bind)对象或数组 Access 。

我建议您先添加Option Explicit,然后将所有变量显式声明为字符串,然后查看是否出现编译错误。

这是一个有用的 "war story"这说明了如何以及为什么使用它。

关于vba - 为什么某些 VBA 错误不触发错误处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11687157/

相关文章:

vba - Excel VBA : Copy Sheet from a workbook to another workbook in different location

vba - 使用公式中的最后一行计数

sql - 一个字段中的值作为从同一表中查找

python - 使用子流程处理ImageMagick的异常

angular - 使用angular2从rest api获取响应错误

vba - 从动态范围中动态提取数据行

mysql - OpenOffice 或 MS 97 甚至 MySQL 下满足单一标准的点击数

c# - 小数列,并发冲突 : the UpdateCommand affected 0 of the expected 1 records

ms-access - Excel - VBA - 将数据保存到 Access 数据库

error-handling - Clarion中是否存在异常处理?