| imho.ws |
![]() |
|
|
|||||||
|
Сообщения:
Перейти к новому /
Последнее
|
Опции темы |
|
|
# 1 |
|
Guest
Сообщения: n/a
|
Обработка ошибок в VBA: Ctrl+Break не ловится, не растет кокос...
1) В Excel'е (MS Office 97) крутится макрос, обработка таблицы в цикле. Дело может быть долгим, поэтому резонно дать пользователю возможность прервать его выполнение. Ставится ловушка ошибок On Error, но нажатие Ctrl+Break не ловится. Ладно, пишется тестовая программа:
Sub ErrTrap() On Error GoTo ErrHand Err.Raise 18 Do Loop Exit Sub ErrHand: MsgBox Err.Number & vbCr & Err.Description Resume Next End Sub В 3-й строке программно генерится ошибка с кодом 18 - «Произошло прерывание, вызванное пользователем», ловится нормально, управление передается обработчику. Управа возвращается в вызывающую программу, начинает крутиться мертвый цикл Do...Loop. Жмется Ctrl+Break или Esc - следует системное сообщение об ошибке «Выполнение программы прервано». Что за епть? Получается, Ctrl+Break генерит не 18 ошибку? А почему Ctrl+Break не ловится? А чем тогда вызывается 18 ошибка? И как тогда прерывать выполнение программы с клавиатуры? 2) В продолжение п. 1. Как альтернативу можно было сделать форму с кнопкой, при нажатии на которую прерывалось бы выполнение, да и индикатор выполнения не помешал бы, но в MS Office 97 все формы модальные. Можно ли все-таки как-то исхитриться и во время выполнения повесить диалоговое окно? Может быть, Win API может помочь? 3) А в MS Project 2000 ошибки вообще не ловятся, никакие - управление обработчику ошибок просто не передается. В той же самой тестовой программе из п. 1, перенесенной в модуль Project'а, все ошибки перехватываются внутренним обработчиком, но в программный не попадают. В чем причина-то...? |