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
の値を持つエラーメッセージが表示され、エラーハンドラで捕捉されません。
http://www.cpearson.com/excel/errorhandling.htm –
@TimWilliamsしたがって、「再開」は、「GoTo AskAgianLoop」の代わりに有効な解決策ですか?あなたのリンクには、「エラー処理ブロックが最初のエラーの原因となった問題を修正することを保証する必要があります。そうでないと、コードは無限ループに入り、エラーの原因となったコード行とエラーハンドリングブロック "を参照してください。これは私が起こりたいものです。 – Quint
ループが詰まる場合に備えて、ループを終了する方法はありませんか?あなたはいくつかの試行回数の後に終了するためにカウンタを追加することができます... –