В настоящее время я работаю над более крупной программой, которая может в какой-то момент выдать ошибку. Поэтому я добавил обработчик ошибок для этого случая. Основная цель - закрыть открытую книгу Excel wbk
, чтобы в фоновом режиме не запускалось слишком много приложений Excel. Поскольку я не знаю, какая часть программы может вызвать ошибку, я не знаю, состояние wbk
и открыто оно или нет. Я попытался добавить проверку для Nothing
, но wbk is Nothing
кажется ложным в этот момент. С помощью следующего кода я получу The remote server machine does not exist or is unavailable (Error 462)
при вызове обработчика ошибок:
Обработчик ошибок
On Error Resume Next
resp = MsgBox(prompt:="Es ist ein Fehler aufgetreten! " & vbCrLf & vbCrLf & "Soll versucht werden weiter fortzufahren?" & _
vbCrLf & vbCrLf & "Fehlercode: " & str(Err.Number) & " entstanden durch " & Err.Source & Chr(13) & Err.Description, _
Buttons:=vbCritical + vbYesNo + vbDefaultButton1, _
title:="Unbekannter Fehler", _
HelpFile:=Err.HelpFile, _
Context:=Err.HelpContext)
If Not wbk Is Nothing Then
wbk.Close False
End If
If resp = vbNo Then Exit Sub
Resume Next
Afaik, я даже не должен получить ошибку из-за On Error Resume Next
. Редактировать: Следует, поскольку "Средство обработки ошибок все еще активно, когда возникает вторая ошибка, и, следовательно, вторая ошибка не перехватывается инструкцией On Error." - источник
TL; DR: wbk
должен быть закрыт при обработке ошибок, если он открыт, но выдает ошибку.
Редактировать: Вызываю ошибку, чтобы вызвать обработчик ошибок. Указанная ошибка возникает только во втором выполнении, поэтому значение wbk
устанавливается нормально, затем рабочая книга закрывается и программа вызывается снова, и ошибка вызывается до повторной инициализации wbk
.