2017-06-07 19 views
0

この問題は、エラーハンドラが2回以上発生した場合にエラーをキャッチしていないことが原因です。これは私が使っているものです。エラーハンドラがキャッチしないエラー

Private Sub DBBackUp() 
On Error GoTo ErrHandler: 
If FSO.FolderExists(DBBackupFolderDir) = True And FSO.FileExists(DBDir) = True Then 

AskAgianLoop: 

    Application.CompactRepair DBDir, CARDBBackupFileDir, True 
End if 


ErrHandler: 
If Err.Number = 58 Or Err.Number = 31523 Then 
    GoTo AskAgianLoop 
Else 
    errMsg = "Error number: " & Str(Err.Number) & vbNewLine & _ 
      "Source: " & Err.Source & vbNewLine & _ 
      "Description: " & Err.Description 
Debug.Print errMsg 
Err.Clear 
End If 
Exit Sub 
End Sub 

上記の説明では、セキュリティ警告が表示され、その実行のたびに2回ユーザーが表示されます。ユーザーが開いている代わりにそれらのいずれかでキャンセルをクリックすると、値31523のエラーコードがスローされます。その後、ErrHandlerに移動されます。同じセキュリティプロンプトが表示された後、ユーザーに再度尋ねられます。ユーザがキャンセルを2回以上押すと、31523の値を持つエラーメッセージが表示され、エラーハンドラで捕捉されません。

+1

http://www.cpearson.com/excel/errorhandling.htm –

+0

@TimWilliamsしたがって、「再開」は、「GoTo AskAgianLoop」の代わりに有効な解決策ですか?あなたのリンクには、「エラー処理ブロックが最初のエラーの原因となった問題を修正することを保証する必要があります。そうでないと、コードは無限ループに入り、エラーの原因となったコード行とエラーハンドリングブロック "を参照してください。これは私が起こりたいものです。 – Quint

+0

ループが詰まる場合に備えて、ループを終了する方法はありませんか?あなたはいくつかの試行回数の後に終了するためにカウンタを追加することができます... –

答えて

0

変更するGoTo AskAgianLoopResume AskAgianLoop:問題を修正しました。

関連する問題