原因不明のループによる VBA の標準エラー処理の問題
-
02-01-2020 - |
質問
Access で新しい VBA プロシージャを作成する手順に従っています。仕様の 1 つは、標準の ExitProc-Error 処理を使用することです。それが何を意味するのか少し混乱しましたが、オンラインの例と、テンプレートとして提供されている以前に完成した例を見て、次のことを思いつきました。
On Error GoTo HandleError
'code that may cause errors
ExitProc:
Exit Function
HandleError:
If FindFolders = False Then
MsgBox ("Required folders for " & InstrumentName & " not found")
ElseIf FindFolderPaths = False Then
MsgBox ("Required folder paths for " & InstrumentName & " not found")
End If
MsgBox Err.Number & " " & Err.Description & " in FindFolderPaths"
Resume ExitProc
End Function
findfolders はエラーを示すためにプロシージャ内で false としてマークしたブール変数で、FindFolderPaths はパスが見つかったかどうかを示すために使用しているプロシージャの名前です。この手順を実行すると、次のメッセージ ボックスが表示されます。エラーがどのように処理されるかを示すために、フォルダー名にエラーを作成しました。
-ICPMSに必要なフォルダーが見つかりません
FindFolderPaths の -0
-ICPMSに必要なフォルダーが見つかりません
-20 FindFolderPaths でエラーなしで再開
プロシージャを段階的に実行すると、ExitProc に進む前に HandleError を 2 回ループしているように見えますが、その理由がわかりません。また、HandleError の 2 番目のループ中にエラー メッセージが変わりますが、これは奇妙です。
解決
あなたの問題は、コード内で直接呼び出してエラーハンドラーを「誤って使用している」ことのようです。 Goto HandleError
エラーが発生したときに自動的に呼び出される代わりに。
これは、コードの実行時にレポートに出力された内容を正確に説明します。
-Required folders for ICPMS not found 'shows regardless of what triggers the handler
-0 in FindFolderPaths 'err number of zero means there's no error
Resume Exit Proc
その後、 実際の エラー、コードの 2 回目の呼び出し
-Required folders for ICPMS not found 'not relevant here...
-20 Resume without Error in FindFolderPaths 'an actual error number and message
通常、テストできる何らかの条件 (フォルダーが見つからないなど) がある場合、エラー ハンドラーを呼び出してそれを処理する必要はありません。「通常の」コードからメッセージを表示してから、 Exit function
. 。または、次を使用してカスタム エラーを発生させます。 Err.Raise
, 、エラー ハンドラーでテストして適切に処理できる特定のエラー番号と説明が与えられます。
http://msdn.microsoft.com/en-us/library/office/aa164019(v=office.10).aspx#odc_tentipsvba_topic3
他のヒント
Remume Remove ExitProcを削除します。コードは終了機能に当たったときに機能を残します。また、MSGBOXを呼び出しているときは、括弧を削除する必要があります。MSGBOXに等しいものを設定しているときにのみ括弧を使用してください。