Этот ответ не решает кнопку отладки (вы должны разработать форму и с помощью кнопок на то, чтобы сделать что-то вроде метода в вашем next question). Но он обращается к этой части:
Теперь я не хочу потерять удобство обработчика по умолчанию, который также указывает на точную строку, где произошла ошибка.
Во-первых, я предполагаю, что вы не хотите этого в производственном коде - вы хотите его либо для отладки, либо для кода, который вы лично будете использовать. Я использую флаг компилятора для указания отладки; то, если я искажаю программу, я могу легко найти строку, которая вызывает проблему.
# Const IsDebug = True
Sub ProcA()
On Error Goto ErrorHandler
' Main code of proc
ExitHere:
On Error Resume Next
' Close objects and stuff here
Exit Sub
ErrorHandler:
MsgBox Err.Number & ": " & Err.Description, , ThisWorkbook.Name & ": ProcA"
#If IsDebug Then
Stop ' Used for troubleshooting - Then press F8 to step thru code
Resume ' Resume will take you to the line that errored out
#Else
Resume ExitHere ' Exit procedure during normal running
#End If
End Sub
Примечание: исключение Resume
, если ошибка происходит в суб-процедуры без обработки ошибок рутина, то Resume
приведет вас к линии в этом прок, что называется подпроцедуру с ошибкой. Но вы можете по-прежнему входить в подпроцедуру и через нее, используя F8, пока он не снова сработает. Если подпроцедура слишком длинная, чтобы сделать ее утомительной, то ваша подпроцедура должна, вероятно, иметь свою собственную процедуру обработки ошибок.
Существует несколько способов сделать это.Иногда для небольших программ, где я знаю, что я буду шагать через него в любом случае, когда устранение неполадок, я просто положить эти строки сразу после MsgBox заявления:
Resume ExitHere ' Normally exits during production
Resume ' Never will get here
Exit Sub
Он никогда не получит к заявлению Возобновить, если вы не перейдя через следующую строку, либо перетащив следующий указатель оператора на эту строку, либо нажав CtrlF9 с указателем на эту строку.
Вот статья, которая расширяется по следующим понятиям: Five tips for handling errors in VBA. Наконец, если вы используете VBA и еще не обнаружили удивительного сайта Chip Pearson, у него есть страница, объясняющая Error Handling In VBA.
Просто держать правильные ссылки ... этот вопрос продолжается здесь: http://stackoverflow.com/questions/3929997/vba-how-to-make-the-current-cursor-in-vbe-jump-to-the-line-where- the-last-error/3930626 # 3930626 –