Problem mit der Standardfehlerbehandlung in VBA aufgrund unerklärlicher Schleifen
-
02-01-2020 - |
Frage
Ich folge den Anweisungen zum Erstellen einer neuen VBA-Prozedur in Access.Eine der Spezifikationen besteht darin, die standardmäßige ExitProc-Error-Behandlung zu verwenden.Ich war ein wenig verwirrt, was das bedeutete, aber ich schaute mir online Beispiele an und zuvor ausgefüllte Beispiele, die als Vorlage bereitgestellt wurden, kam auf Folgendes:
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 ist eine boolesche Variable, die ich in der Prozedur als falsch markiert habe, um einen Fehler anzuzeigen, und FindFolderPaths ist der Name der Prozedur, die ich als Hinweis darauf verwende, ob die Pfade gefunden wurden.Wenn ich diesen Vorgang ausführe, werden die folgenden Nachrichtenfelder angezeigt.Ich habe einen Fehler im Ordnernamen erstellt, um zu zeigen, wie mit dem Fehler umgegangen wird:
-Erforderliche Ordner für ICPMS nicht gefunden
-0 in FindFolderPaths
-Erforderliche Ordner für ICPMS nicht gefunden
-20 Fortsetzen ohne Fehler in FindFolderPaths
Wenn ich die Prozedur Schritt für Schritt durchgegangen bin, sieht es so aus, als würde sie HandleError zweimal durchlaufen, bevor sie zu ExitProc wechselt, und ich kann nicht herausfinden, warum.Außerdem ändert sich die Fehlermeldung während der zweiten Schleife in HandleError, was seltsam ist.
Lösung
Ihr Problem scheint darin zu bestehen, dass Sie den Fehlerhandler „missbrauchen“, indem Sie ihn direkt in Ihrem Code aufrufen Goto HandleError
anstatt es automatisch aufrufen zu lassen, wenn ein Fehler auftritt.
Dies würde genau erklären, was Ihrer Meldung nach bei der Ausführung Ihres Codes ausgegeben wurde:
-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
löst dann eine aus tatsächlich Fehler, Code ein zweites Mal aufrufen
-Required folders for ICPMS not found 'not relevant here...
-20 Resume without Error in FindFolderPaths 'an actual error number and message
Wenn es eine Bedingung gibt, auf die Sie testen können (z. B. ein fehlender Ordner), müssen Sie dies normalerweise nicht durch Aufrufen eines Fehlerbehandlers beheben – Sie können eine Meldung aus Ihrem „normalen“ Code anzeigen und dann einfach Exit function
.Alternativ können Sie mithilfe von einen benutzerdefinierten Fehler auslösen Err.Raise
, Geben Sie ihm eine bestimmte Fehlernummer und eine Beschreibung, die Sie in Ihrem Fehlerhandler testen und entsprechend behandeln können.
http://msdn.microsoft.com/en-us/library/office/aa164019(v=office.10).aspx#odc_tentipsvba_topic3
Andere Tipps
Resume EXITPROC entfernen.Der Code hinterlässt die Funktion, wenn sie die Endfunktion trifft.Sie müssen auch die Klammern entfernen, wenn Sie Msgbox anrufen.Verwenden Sie nur Klammern, wenn Sie mit der Msgbox etwas gleich einsetzen.