3

今朝コードを更新しているときに、エラーが発生しました。関数を文字列に置き換えましたが、その後のかっこを削除するのを忘れたため、コードが実行されませんでした。

ただし、これはエラー処理コードをトリガーしなかったため、エラーは報告されず、コードをステップ実行してエラーを見つけるのに時間がかかりました。

以下のコード:

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 の後の 2 つの括弧が原因で発生します。これらを削除すると、コードは正常に動作します。しかし、このエラーがエラー処理をトリガーしないのはなぜですか?

4

1 に答える 1

5

Option Explicitモジュールの上部にあるようには見えません。その結果、すべての文字列変数は暗黙のうちに として宣言されVariantます。コンパイラが式 をどうするかはわかりませんが、strBackupUser()ある種の恐ろしいレイト バインド オブジェクトまたは配列アクセスを試みると思います。

最初に追加してからOption Explicit、すべての変数を文字列として明示的に宣言し、コンパイラ エラーが発生するかどうかを確認することをお勧めします。

これは、それを使用する方法と理由を説明する便利な「戦争の話」です。

于 2012-07-27T12:04:47.213 に答える