Страница: 1 | 2 |
Вопрос: Работа с реестром
Добавлено: 26.02.10 09:50
Автор вопроса: Jasmin
Ответы
Всего ответов: 22
Номер ответа: 16
Автор ответа:
Smith
ICQ: adamis@list.ru
Вопросов: 153
Ответов: 3632
Профиль | | #16
Добавлено: 27.02.10 14:25
Sub()
On Error GoTo Err1
оператор1
On Error GoTo Err2
оператор2
On Error GoTo 0
Exit Sub
Err1:
оператор3
Resume
Err2:
оператор4
Resume Next
End Sub
Номер ответа: 17
Автор ответа:
Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #17
Добавлено: 01.03.10 17:08
Догадываюсь, что так. Спасибо. Создала код.
Номер ответа: 18
Автор ответа:
GDK
Вопросов: 13
Ответов: 348
Профиль | | #18
Добавлено: 03.03.10 14:53
On error resume next будет пропускать все операторы с ошибками
ДО ТЕХ ПОР ПОКА НЕ ВСТРЕТИТСЯ on error goto 0.
Я раньше старался не пользоваться on error-ами. А зря. Например надо закрыть вордовский документ. Eсть переменная D as word.document. Пишем типа D.Close(...). Если D пустая или уже вручную закрыта пользователем будет ошибка. Надо перед закрытием проверить что она не пустая и что не закрыта. Есть более простой путь:
On Error Resume next
 .close()
On Error GOTO 0
А вот типа
On Error GoTo Err1
оператор1
On Error GoTo Err2
стараюсь не использовать. Не удобно это и запутаться можно. Если возникает такая надобность, стараюсь разделить процедуру на несколько процедур и использовать On error resume next в каждой.
И ещё. Аккуратнее с обработкой ошибок в цыклах. Где то это здесь уже было. В таких случаях лучше тело цыкла сделать в виде отдельной привате ф-ции, в которой будет обработка ошибок. Меньше проблемм будет.
Номер ответа: 19
Автор ответа:
Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #19
Добавлено: 03.03.10 19:35
Ооо, спасибо за разъяснения. Может теперь больше сдружусь с этим оператором.
Номер ответа: 20
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #20
Добавлено: 05.03.10 00:49
Обработка ошибок без грубого нарушения принципов структурного программирования и с точки зрения читабельности кода нормально смотрится только в маленьких процедурах-функциях, т.е. есть смысл раздробить большую подпрограмму на мелкие с обработчиками где нужно и что нужно. То же самое касается пропуска ошибок в отрезке подпрограммы типа On Error Resume Next, хотя на моей памяти в VBA бывают ситуации, где и это не позволяет сбросить ошибки. В основном необрабатываемые ошибки приложения - application defined error(s)
Номер ответа: 21
Автор ответа:
GDK
Вопросов: 13
Ответов: 348
Профиль | | #21
Добавлено: 05.03.10 10:29
Ну да. Для удобства надо правильно продумывать структуру программы - дробить её на нужные ф-ции, а не всё в одну процедуру запихивать. А ещё лучше использовать модули классов. Я в последнее время стандартные модули почти не использую и удобство чувствуется довольно сильно.
Номер ответа: 22
Автор ответа:
Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #22
Добавлено: 05.03.10 17:57
Полностью согласна с обоими.
P. S. Структуру получается обдумывать автоматически. Сама не знаю как. Но получается. (смущаюсь) Никогда в одну процедуру все не запихиваю.