我正在遵循有关在Access中创建新VBA过程的说明。其中一个规范是使用标准ExitProc-错误处理。我有点困惑,但我在网上看了例子和以前完成的例子作为模板提供,我想出了这个:

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是我正在使用的过程的名称,作为是否找到路径的指示。当我运行此过程时,会出现以下msg框。我在文件夹名称中创建了一个错误,以显示错误将如何处理 :

-未找到ICPMS所需文件夹

-0在FindFolderPaths

-未找到ICPMS所需文件夹

-20在FindFolderPaths中恢复没有错误

当我一步一步地完成这个过程时,它看起来像是在ExitProc之前通过HandleError循环两次,我无法弄清楚为什么。此外,错误消息在HandleError中的第二个循环期间更改,这很奇怪。

有帮助吗?

解决方案

你的问题似乎是你通过直接在你的代码中调用它来"错误地使用"错误处理程序 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 然后触发一个 实际 错误,第二次调用代码

-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

其他提示

删除resume exitproc。代码将在遇到结束功能时留下该函数。此外,您需要在呼叫MsgBox时删除括号。当您设置等于MsgBox时,才会使用括号。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top