2012-07-27 113 views
3

今天早上更新我的代码时,我导致了一个错误 - 我用一个字符串替换了一个函数,但忘记取出后面的括号,导致代码无法运行。为什么有些VBA错误不会触发错误处理?

但是,这并没有触发我的错误处理代码,所以它没有报告错误,并且花了我很多时间来逐步查找代码。下面

代码:

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 

错误是由两个parenthese strBackupUser后大约一半下来的代码引起的 - 删除这些和代码工作正常 - 但为什么没有这个错误引发的错误处理?

+1

我使用On Error Goto ErrHandler进行错误处理btw,子程序的第一行。 – BFWebAdmin 2012-07-27 11:49:01

+0

你能发表一些代码吗? – JMK 2012-07-27 11:49:29

+0

@JMK - 发布 - 我发布的版本是导致错误的版本,取出strBackupUser后的括号以使其正常工作。 – BFWebAdmin 2012-07-27 11:58:15

回答

5

您的模块顶部看起来没有Option Explicit。因此,所有的字符串变量将被默默地声明为Variant。我不确定编译器会使用表达式strBackupUser(),我猜它会尝试某种可怕的迟到对象或数组访问。

我建议你先添加Option Explicit,然后显式声明所有的变量为字符串,然后看看你是否得到编译器错误。

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