Access-VBA: Ist es möglich, reset Fehlerbehandlung
Ich bin mit dem ersten Teil meines Programms
auf Fehler gehen Sie zu start
Angenommen, in meinem zweiten Teil bin ich wieder mit
on error resume next
Diese zweite Fehlermeldung, die Falle wird nicht ausgelöst, als der erste noch aktiv ist. Gibt es eine Möglichkeit, um de-aktivieren Sie die erste Fehler-handler, nachdem es verwendet wurde?
Set objexcel = CreateObject("excel.Application")
objexcel.Visible = True
On Error GoTo Openwb
wbExists = False
Set wbexcel = objexcel.Workbooks.Open("C:\REPORT3.xls")
Set objSht = wbexcel.Worksheets("Sheet1")
objSht.Activate
wbExists = True
Openwb:
On Error GoTo 0
If Not wbExists Then
objexcel.Workbooks.Add
Set wbexcel = objexcel.ActiveWorkbook
Set objSht = wbexcel.Worksheets("Sheet1")
End If
On Error GoTo 0
Set db = DBEngine.opendatabase("C:\book.mdb")
Set rs = db.OpenRecordset("records")
Set rs2 = CreateObject("ADODB.Recordset")
rs2.ActiveConnection = CurrentProject.Connection
For Each tdf In CurrentDb.TableDefs
If Left(tdf.Name, 4) <> "MSys" Then
rs.MoveFirst
strsql = "SELECT * From [" & tdf.Name & "] WHERE s=15 "
Do While Not rs.EOF
On Error Resume Next
rs2.Open strsql
Nach Ausführung der letzten Anweisung ich möchte, um den Fehler zu ignorieren und sich auf die nächste Tabelle, aber die Fehlerbehandlung nicht zu funktionieren scheint.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es fast immer besser, um Fehler zu vermeiden, anstatt Sie zu behandeln. Zum Beispiel:
On error goto 0
hand geben, um visual basic für Fehler-Behandlung (im Allgemeinen message box)On error goto label
leitet den code zu label:On error resume next
wird den Fehler ignorieren und fortfahrenResume next
Umleitung der code, um die nächste Zeile nach dem Fehler ausgelöstbedeutet es, dass Kombinationen von Anweisungen wie
keinen Sinn machen
Und wenn Sie umleiten möchten einen "on error" - Anweisung, die Sie haben, es zu tun auf diese Weise:
Wenn Sie umleiten möchten einen Fehler auf einem Etikett (für die Behandlung oder was auch immer) und dann gehen Sie zurück zu dem code, wo der Fehler aufgetreten, haben Sie etwas zu schreiben wie:
Aber ich wirklich raten, Sie werden strenger auf Ihre Fehler-management. Sie sollten zunächst in der Lage sein, etwas zu tun:
Der nächste Schritt wird sein, zu antizipieren, die Fehler in Ihrem code so, dass das err-Objekt wird nicht erhoben werden. Sie können zum Beispiel schreiben eine generische Funktion wie diese:
Können Sie dann nutzen Sie diese Funktion in Ihrem code durch die Prüfung der Existenz Ihrer xls-Datei:
Brauchen Sie nicht Ihre wbExist variable mehr...
In der gleichen Weise, sollten Sie erwarten der Fall, wenn das recordset keine Datensätze. Aufschreiben, rs.MoveFirst vor der Prüfung, könnte es ein Fehler. Sie sollten dann schreiben
Die Sie benötigen, um den Fehler zu löschen. Versuchen Sie, diesen code in:
Können Sie auch Irren.Anzahl zum Umgang mit bestimmten fehlerfällen.
versuchen
Für weitere Hilfe schau mal hier: http://msdn.microsoft.com/en-us/library/bb258159.aspx
Es ist ein Unterschied zwischen einer Antwort und einer Lösung. Manchmal brauchen wir nur eine Antwort, Warnungen geschätzt, und lassen uns durch Erfahrung lernen, dass es nicht wirklich eine gute Lösung. That being said, ich fand diese:
Müssen Sie die Verwendung von On Error GoTo -1 oder Err.Klar, reset error trapping.
Überprüfen diese Antwort ich gepostet vor ein paar Monaten für eine ausführlichere Erklärung.