Excel VBA On Error Resume Next, Optionen korrekt sind, aber noch nicht fortsetzen
ich habe schon überprüft, Extras > Optionen > Allgemeine > Fehlerbehebung im VBE - ich habe es sowohl mit "Break in Klassenmodul" und "Break on Unhandled Errors" und so oder so ist es immer noch den Fehler auslöst. Der Fehler wird geworfen auf der Linie:
Set xlContacts = Workbooks(LocalContactsFilename)
wirft Er eine Fehlermeldung besagt, dass der index außerhalb des Bereichs ist, und ich verstehe, dass dies bedeutet, dass der index nicht gefunden wurde innerhalb der Workbooks-Auflistung, diese Aussage ist hier, weil in der Regel die Datei ist bereits geöffnet, als ein add-in, so kann ich nur einen Verweis, um es durch diese Aussage. Es soll wieder auf diesem Fehler, weil wenn die Datei nicht geöffnet ist, öffne ich es.
Eine sonderbare Sache, die ich bemerkte über diese - auch wenn Sie diese Zeile von code ist nicht Zugriff auf alle remote-Dateien oder das Netzwerk, nur wirft diese Fehlermeldung, wenn ich vom Netz getrennt. Wenn ich die Arbeitsmappe öffnen, während Sie mit dem Netzwerk verbunden ist dieser Fehler nicht ausgelöst wird.
Hat jemand erlebt? Wenn Sie Ihre Optionen eingestellt haben, nur halt auf nicht behandelte Ausnahmen, aber es hält sowieso?
Public Sub openContactsFile()
On Error Resume Next
Dim fso As New FileSystemObject
Dim LocalContactsPath As String
Dim LocalContactsFilename As String
Dim LocalContactsShortFilename As String
LocalContactsPath = wbMyCompanyWorkbook.Names("localContactsPath").RefersToRange.Value
LocalContactsFilename = Mid(LocalContactsPath, (InStrRev(LocalContactsPath, "\") + 1))
LocalContactsShortFilename = Mid(LocalContactsFilename, 1, (InStrRev(LocalContactsFilename, ".") - 1))
'On Error Resume Next
Application.ScreenUpdating = False
If Not fso.FileExists(LocalContactsPath) Then
If MsgBox("The contacts file is not available. Click Yes to update the contacts now, or No to use the workbook without contact auto-fill capability.", vbYesNo, ThisWorkbook.NAME) = vbYes Then
SyncContacts
Else
GoTo cancelParse
End If
End If
If fso.FileExists(LocalContactsPath) Then
On Error GoTo catch_no_remote_connection
If fso.GetFile(LocalContactsPath).DateLastModified < fso.GetFile(wbMyCompanyWorkbook.Names("remoteContactsPath").RefersToRange.Value).DateLastModified Then
If MsgBox("Your local contacts file appears to be out of date, would you like to download the latest contacts file?", vbYesNo Or vbQuestion, ThisWorkbook.NAME) = vbYes Then
SyncContacts
End If
End If
catch_no_remote_connection:
If Err.Number = 53 Then Err.CLEAR
On Error Resume Next
Set xlContacts = Workbooks(LocalContactsFilename)
If xlContacts Is Nothing Then
Set xlContacts = Workbooks.Open(LocalContactsPath, False, True)
End If
xlContacts.Sheets(1).Range("A1:CN2000").Sort Key1:=xlContacts.Sheets(1).Range("F2"), Order1:=xlAscending, Key2:=xlContacts.Sheets(1).Range("B2"), Order2:=xlAscending, Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal
End If
'hide the contacts from view or editing
On Error Resume Next
If Not Workbooks(LocalContactsFilename) Is Nothing Then xlContacts.IsAddin = True
Err.CLEAR
On Error GoTo 0
cancelParse:
Application.ScreenUpdating = True
Exit Sub
End Sub
Vielen Dank im Voraus für jede Hilfe mit diesem!
- "diese Aussage ist hier, weil in der Regel die Datei ist bereits geöffnet, als ein add-in, so kann ich nur einen Verweis, um es durch diese Aussage" - wie Sie Ihren code mehr resiliant? also Griff der 2 Fällen: bereits geöffnet ist, nicht bereits geöffnet ist...
- Sie können nicht einen Fehler-handler (auch
On Error Resume Next
), während in einem anderen Fehler-handler. Gebe dies Lesen: cpearson.com/Excel/ErrorHandling.htm - wie habe ich das nicht weiß?! Danke :). Genauer gesagt, Sie könnte sagen, dass Sie nicht festlegen können, einen Fehler-handler, nachdem ein Fehler ausgelöst wird, aber, bevor Sie eine
Resume
wieder in den normalen code-Ausführung? Ich mache diese Unterscheidung, weil im Gegensatz zu Try/Catch-handler-code kann oft erreicht werden durch andere Mittel als einen Fehler, z.B. routine cleanup-code. - Tut Err.KLAR, nicht reset der error-handler? Ich bin sicher ich haben verwendet die Codierung genau wie dieses vor und es funktionierte gut.... in der Tat ist dieser code an sich funktioniert einwandfrei, wenn ich mit dem Netzwerk verbunden, sondern wirft den Fehler, wenn nicht angeschlossen. -- Warum sollte das keinen Unterschied machen, auf der Linie ist es zu werfen?
- In Der Tat Irren.Klar, nicht reset der Fehler-Handler. Sie müssen verwenden Sie Fortsetzen oder beenden das Verfahren vor der mit der früheren oder anderen Fehler Handler.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hatte ich die gleichen (unglaublich frustrierend, so weit ich erzählen kann, unerklärliche) problem wie du haben, aber in einem anderen Kontext. Ich finde, das beste, was zu tun ist, eine Arbeit zu finden-rund um. Anstelle der Verwendung von Fehlerbehandlung, wie Sie haben, verwenden Sie diese statt:
Ich würde haben bevorzugt, es code die Weise, die Sie getan haben, aber es scheint, gibt es keine Wahl.
@TimWilliams
Danke für die Antwort - bin ich davon ausgegangen, Err.CLEAR setzt die Fehlerbehandlung, aber es funktioniert nicht. Der code unten funktioniert korrekt, ob mit dem Netzwerk verbunden ist oder nicht (was ich jetzt weiß war der Ursprung des Problems), das problem war, wenn es warf die Datei nicht gefunden-Fehler und ging zu catch_no_remote_connection, es war nicht fortsetzen, um den Fehler zu löschen, also fügte ich diese zu schließen aus der Fehlerbehandlung block-und reset-handler:
Funktionalen Code:
Danke Euch allen für die Zeit nehmen, dies zu betrachten!