![]() |
Обработка ошибок в 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'а, все ошибки перехватываются внутренним обработчиком, но в программный не попадают. В чем причина-то...? |
(Извиняюсь за отсутствие отступов, пробелы в начале строки куда-то испарились.)
|
| Часовой пояс GMT +4, время: 01:09. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.