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.
Schreibe einen Kommentar