2015-06-26 3 views
2

Поэтому я не могу заставить это работать, и я не понимаю, почему. Он говорит error 53, но когда я меняю intNumber на число, которого нет, он отлично работает.Обработчик ошибок VBA с ошибками GOTO и многократными ошибками

Я считаю, что проблема состоит в том, что одновременно происходит несколько ошибок.

Function Download_Location() As String 
'kill the file as well 
    Dim intNumber As Integer, strOther As String 
    intNumber = 1 
fReshstart: 

    Download_Location = "C:\Users\" & Environ$("Username") & "\Downloads\MSaccessfile" & intNumber & ".xlsx" 

    On Error GoTo Errhandler 
Kill Download_Location 


    Errhandler: 

    Select Case Err 

    Case 53: 'why wont it pick error 53 
     Err.Clear 
     MsgBox "it worked" 
     Exit Function 'no file to delete 

    Case 70: intNumber = intNumber + 1 
     Err.Clear 
     GoTo fReshstart 

    End Select 

End Function 
+0

Вы не имеете 'Выход Function' перед' ErrHandler: ', поэтому обработчик ошибок выполняется после успешного' Kill' ​​тоже. – GSerg

+0

Поэтому ни одно из этих решений не будет работать. Потому что я хочу иметь возможность создавать MSaccessfile1, MSaccessfile2, MSaccessfile3, extra ..., но проблема возникает, когда произошла одна ошибка. Кажется, что обработчик ошибок не хочет обрабатывать больше ошибок. – user3846155

ответ

0

Обнаружили проблему этот вопрос мне нужно очистите обработчик ошибок, используя . Ошибка. Перейти к -1

Errhandler: 

Select Case Err 
Case 53: 'used when their is no file to kill 
    On Error GoTo -1 
Case 70: intNumber = intNumber + 1 'used when the file is opened already so new file is required to be built 
    On Error GoTo -1 
    GoTo fReshstart 

End Select 

End Function

1

Я столкнулся с множеством сложных сценариев ошибок, используя Kill, и создал отличную функцию для решения этой проблемы. Здесь это для всех, кого это интересует. Это довольно просто, но не поможет иметь такую ​​безумную обработку ошибок с участием Kill. Надеюсь, это поможет вам и другим.

Сначала Добавьте эту функцию к/модуль:

Function KillAndWasKilled(strFilePath As String) As Boolean 
    'attempt to kill a file and report success; trying to head off all the oddball stuff that can happen in functions when kill is used 
    On Error GoTo ErrHandler 
    Kill strFilePath 
    KillAndWasKilled = True 
Exit Function 
ErrHandler: 
    KillAndWasKilled = False 
End Function 

Теперь Заменить этот:

Kill Download_Location 

С этой

if dir(Download_Location) <> "" then 'the file exists; if it doesnt exist then there's nothing to attempt to kill! 
    if KillAndWasKilled(Download_Location) = false then 'something went wrong when trying to kill the file 
    err.Raise -666, , "Unable to Delete " & Download_Location 
    end if 

end if 
+0

О, я понимаю, что это не говорит вам, почему это провалилось, но я не делаю слепых убийств, и обычно есть только несколько причин. файл не существует, он заблокирован или не имеет прав. не забудьте сначала проверить наличие файла (если dir (theFilePath) = "" означает, что файл отсутствует) – PractLogical

Смежные вопросы