Pregunta

Estoy siguiendo instrucciones sobre cómo crear un nuevo procedimiento VBA en Access.Una de las especificaciones es utilizar el manejo estándar de errores ExitProc.Estaba un poco confundido sobre lo que eso significaba, pero miré ejemplos en línea y los ejemplos previamente completados proporcionados como plantilla, se me ocurrió esto:

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 es una variable booleana que marqué como falsa en el procedimiento para indicar un error y FindFolderPaths es el nombre del procedimiento que estoy usando como indicación de si se encontraron las rutas.Cuando ejecuto este procedimiento aparecen los siguientes cuadros de mensajes.Creé un error en el nombre de la carpeta para mostrar cómo se manejaría el error:

-No se encontraron las carpetas requeridas para ICPMS

-0 en FindFolderPaths

-No se encontraron las carpetas requeridas para ICPMS

-20 Reanudar sin error en FindFolderPaths

Cuando repasé el procedimiento paso a paso, parece que se repite HandleError dos veces antes de ir a ExitProc y no puedo entender por qué.Además, el mensaje de error cambia durante el segundo ciclo en HandleError, lo cual es extraño.

¿Fue útil?

Solución

Su problema parece ser que está "usando mal" el controlador de errores llamándolo directamente en su código usando Goto HandleError en lugar de que se llame automáticamente cuando se produce un error.

Esto explicaría exactamente lo que reportó cuando se ejecutó su código:

-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 luego desencadena un actual error, llamando al código por segunda vez

-Required folders for ICPMS not found        'not relevant here...
-20 Resume without Error in FindFolderPaths  'an actual error number and message

Normalmente, si hay alguna condición que pueda probar (como una carpeta faltante), entonces no necesita manejar eso llamando a un controlador de errores; puede mostrar un mensaje de su código "normal" y luego simplemente Exit function.Alternativamente, genere un error personalizado usando Err.Raise, dándole un número de error específico y una descripción que puede probar y manejar adecuadamente en su Controlador de errores.

http://msdn.microsoft.com/en-us/library/office/aa164019(v=office.10).aspx#odc_tentipsvba_topic3

Otros consejos

Eliminar Reanudar ExitProc.El código dejará la función cuando golpea la función final.Además, debe eliminar los paréntesis cuando llame a MsgBox.Solo use paréntesis cuando esté configurando algo igual a MSGBOX.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top