Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Глобальная обработка ошибок


Автор: Medved 24.6.2005, 03:53
Сабж.

Автор: likhobory 24.6.2005, 09:48
сей текст

Автор: Medved 24.6.2005, 12:17
Это все хорошо, спасибо за информацию, но мне нужна именно глобальная обработка ошибок, т.е. когда обработка ошибок происходит в одном месте.

Можно конечно через WinAPI выкрутиться, но меня это не устраивает. Это сколько же кода надо писать, у меня времени совсем нет. Да и время чистого WinAPI уже прошло.

Автор: likhobory 24.6.2005, 12:54
ну а кто мешает
Код
Public Sub GlobalHandler (ErrNum As Integer) 
'''''''''''''''''''''
End Sub

Sub InitializeMatrix(Var1, Var2, Var3, Var4)    
    On Error GoTo ОбработкаОшибок    
    . . .    
    Exit Sub    
ОбработкаОшибок:    
   Call GlobalHandler (Err)
   ''''''''''''''''''''''''''''''''''t    
End Sub

Автор: Medved 24.6.2005, 13:39
А... это не глобальная обработка ошибок, это пародия на нее, все равно мне придется локально всезде обрабатывать их, а потом уже передавать в глобальную процедуру. Это не есть гуд, нужно так чтобы эта процедура сама ошибки перехватывала. Лучше уж тогда через WinAPI просто перехватывать виндовозные сообщения об ошибках.

(2likhobory, не обижайтесь пожалуйста, это камень не в ваш огород, еще раз спасибо, что откликнулись и уделили внимание этому вопросу.)

Автор: likhobory 24.6.2005, 14:20
Pegas, речь ведь шла о VBA, а это максимум, на что он способен,
так что WinApi здесь весьма подходящий костыль smile

Автор: Medved 24.6.2005, 15:00
Понял. Вопрос снят. Что хотел узнать, то узнал. Спасибо.

Автор: Staruha 2.7.2005, 13:21
likhobory почти как в твоем коде получилось.
Создала таблицу ошибок.Чтение таблицы в модуль кинула.Наверно такая библиотека есть и как в нее влезть?
модуль
Код

Sub hhh()
For rw = 2 To 13
 If Err.Number = Range("A" & rw).Value Then
          MsgBox Range("B" & rw).Value
   Exit For
 End If
Next
End Sub

код
Код

Private Sub Worksheet_Change(ByVal Target As Range)
  On Error GoTo ErrorHandler
         Range("E12").Value = Range("E10").Value / 3
   Exit Sub
 ErrorHandler:
            hhh
 End Sub

Автор: likhobory 2.7.2005, 15:47
справедливости ради еще раз замечу, что вышеуказанный перевод "родной" офисной справки принадлежит не мне
а описание возможных ошибок можно получить в той же справке, указав в поиске Trappable Errors
по поводу приведенных примеров, позволь отметить ряд моментов:
в обработчике Worksheet_Change перед изменением значения ячейки пропиши
Код
EnableEvents = False

иначе войдешь в бесконечный цикл, а затем не забудь все вернуть на круги своя
для генерации конкретной ошибки можем использовать метод RAISE, но вне функции обработки ошибок, иначе опять зациклимся, поскольку в указанном примере при генерации ошибки мы попадаем в обработчик родительской процедуры (Worksheet_Change)
Код
'''''''''''''''''''''
On Error GoTo ErrorHandler
Err.Raise {№ошибки}
'''''''''''''''''''''

для получения описания (англоязычного) - Err.Description
Код
Sub hhh ()
'''''''''''''''''''''
MsgBox Err.Description
''''''''''''''''''''''
End Sub

Автор: Staruha 2.7.2005, 16:20
Мне тут долго разбираться. Вот только про зацикливание. Это действительно имело место. Но методом тыка я это устранила и вышеуказанный код не зацикливается.Или это только у меня на компе?

Автор: likhobory 2.7.2005, 18:43
Цитата(Staruha @ 2.7.2005, 17:20)
Вот только про зацикливание. Это действительно имело место. Но методом тыка я это устранила

можно поподробнее ??

Автор: Staruha 4.7.2005, 19:20
Я все поняла,подробней неохота. smile

Автор: Staruha 5.7.2005, 20:07
Цитата
Подпрограмма обработки ошибок не может быть процедурой Sub или Function. Эта подпрограмма должна быть частью программы, которая отмечается с помощью метки строки или номера строки.

Как бы мой случай опровергает это.Или я не все поняла?

Автор: likhobory 12.7.2005, 20:28
Цитата(Staruha @ 5.7.2005, 21:07)
Как бы мой случай опровергает это.Или я не все поняла?

он это подтверждает, но ты можешь вызывать функцию/процедуру из подпрограммы обработки ошибок, что, собственно и происходит
Код

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ErrorHandler
''''''''''''''''''''''
Exit Sub
ErrorHandler: ' начало {подпрограммы}
'вызов некой процедуры
hhh
End Sub

Автор: Staruha 12.7.2005, 20:33
smile Спасибо.Догнала

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)