2012-07-27 3 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 

오류가 중간 코드 아래에 대한 strBackupUser 후 두 괄호에 의해 발생합니다 - 다음을 삭제하고 코드가 잘 작동 - 그런데 왜이 오류는 오류 처리를 트리거하지 않는 이유는 무엇입니까?

+1

오류 처리 btw에 대한 On Error Goto ErrHandler를 사용합니다. 첫 번째 줄은 서브 루틴입니다. – BFWebAdmin

+0

몇 가지 코드를 게시 할 수 있습니까? – JMK

+0

@JMK - 게시 됨 - 내가 게시 한 버전이 오류를 일으키는 버전입니다. strBackupUser 다음에 오는 parenthese를 제거하여 작동하게 만듭니다. – BFWebAdmin

답변

5

모듈 상단에 Option Explicit이없는 것 같습니다. 결과적으로 모든 문자열 변수는 자동으로 Variant으로 선언됩니다. 나는 컴파일러가 어떤 식 으로든 strBackupUser()을 만들지 모르겠다. 나는 끔찍한 지연 바인딩 된 객체 나 배열 접근을 시도 할 것이라고 생각한다.

먼저 Option Explicit을 추가 한 다음 모든 변수를 문자열로 명시 적으로 선언 한 다음 컴파일러 오류 발생 여부를 확인하는 것이 좋습니다.

유용하고 유용한 이유를 보여주는 "war story"입니다.

관련 문제