Здравствуйте всем!
в общем, с начала писал я вам письмо с просьбой о помощи (приведу его полностью, дабы уберечь остатних пользователей программных продуктов "всеми любимой"
компании, не к ночи будет упомянуто, "МокрыйСофт", от подобных "граблей").
Цитирую себя любимого:
"Изучаю VBA для Excel-я по книге: А. Гарнаев "MS Excel 2000, разработка приложений"...
Помогите пожалуйста разобраться со следующим:
В книге есть пример по созданию процедур с перехватом и обработкой ошибок. Но почему-то он у меня не работает.
Итак, есть форма с двумя текстовыми полями и Cmd Button (cmdOK). В первое поле (txtNumber) вводится число (x), во втором (txtInverse), после нажатия "cmdOK", выводится результат (y).
Вот код:
Private Sub cmdOK_Click()
Dim x As Double, y As Double
'
' Передача управления на обработчик ошибок,
' помеченный меткой ErrorHandler
On Error GoTo ErrorHandler
'
x = CDbl(txtNumber.Text)
y = 1 / x
txtInverse.Text = CStr(y)
' Выход из процедуры в случае успешного нахождения результата
Exit Sub
'
' Обработчик ошибок
ErrorHandler:
MsgBox "Произошла ошибка: " & CStr(Err.Number) & "-" & _
Err.Description, vbInformation, _
"Обратное значение"
Select Case Err.Number
Case 11, 13
txtNumber.SetFocus
Exit Sub
Case 6
txtNumber.Text = 1
y = 1
Resume Next
Case Else
MsgBox "Непредвиденная ошибка", vbInformation, _
"Обратное значение"
Exit Sub
End Select
End Sub
Далее для проверки предлагается ввести в "txtNumber" число: "1е-310", что, по идее, должно привести к ошибке "Переполнение" (код 6) и обработке ее в процедуре. А вот этого как раз и не происходит... Т.е. просто выскакивает окошко с сообщением: "Run-time error '6'...", со стандартными предложениями "закончить", "отладить" или, типа, "хелп", и усе.
Процедура, естественно, останавливается на строчке:
в общем, такое впечатление, что чегой-то не загружается ентот самый отладчик, но по какой причине, и чего собственно ему надо, непонятно.
"Поможите чем сможите", пожалуйста.
P.S. Excel в составе XP-шного Офиса. VBA v6.3
Но пока я сие послание вам корябал - не переставал неустанно ковырять этот... (пи-и-и-и-и-и) ...ый (в смысле - чудесный) Бэйсик, который "Вижел" и, к тому же, "фор Аппликэйшн". И вот чего оказалось:
В опциях редактора VBA (Tools->Options) на вкладке "General" есть одна любопытная группа "радиобатонов", "Error Trapping" прозывается: "Break on All Errors", "Break in Class Module" и "Break on Unhandled Errors".
Так вот, у меня было выбрано: "Break on All Errors". Переключил на: "Break on Unhandled Errors", и все поехало.
То исть проблему я эту порешил, но вытек из нее интересный вопросец: :?
:?: А можно эту кнопку переключить программно из того же VBA?
(На тот случай, если приложение с такой процедурой обработки ошибок придется запускать кому-то другому и на другой "машине". Боже упаси, вас подумать, что я это спрашиваю с каким-нибудь криминальным умыслом.)
Вот на этот вопрос я бы собстно и хотел получить ответ. (Надеюсь у вас хватило терпения дочитать сей опус до конца.) :oops: