|
On Error не работает
|
|||
---|---|---|---|
#18+
Добрый день! столкнулся с проблемой при использовании обработчика ошибок: есть две формы к которым я обращаюсь в своей процедуре, если формы не открыт то появляется ошибка 2450, на формах есть галочки состояние которых я проверяю в коде( т.е. отмечена или нет) почему то если ее не активировать то появляется ошибка 13(не определен тип), можно просто поставить и снять галку и все ок, но я хотел написать обработчик, что бы при возникновении этих ошибок программ перескакивал дальше и работала. Получается так: при обращении к форме 1 появляется ошибка 2450- не найдена форма, обработчик ошибок ловит ее, появляется сообщение откройте форму, открываю форму иду далее, появляется вторая ошибка - 13, обработчик ее ловит перескакиваю иду дальше, обращаюсь ко второй форме - опять появляется ошибка 2450, но ее уже почему то обработчик не ловит и не обрабатывает, в чем дело не пойму, может кто то сталкивался с эти???? Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2018, 13:21 |
|
On Error не работает
|
|||
---|---|---|---|
#18+
Это не обработчик ошибок, а заготовка под Double Fault. Где, блин, Resume? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2018, 14:28 |
|
On Error не работает
|
|||
---|---|---|---|
#18+
поясните пожалуйста в чем именно двойная ошибка??? и зачем мне использовать On Error Resume Next? если я наоборот хочу разобраться с этой ошибкой, не ну может это выход конечно потом применить On Error Goto 0, но мне не понятно почему когда ошибка возникает On Error ее не перехватывает, как будто он не активен в этот момент, первый раз срабатывает, а когда повторная ошибка возникает то нет???? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2018, 15:13 |
|
On Error не работает
|
|||
---|---|---|---|
#18+
pavel1381в чем именно двойная ошибка???Двойная ошибка - это ошибка во время выполнения обработчика ошибок. pavel1381зачем мне использовать On Error Resume Next?Конечно незачем, Вот только On Error и Next - это Вы сами додумали. Я говорил совсем об ином - об операторе возврата из обработчика. У Вас его тупо нет - а он ОБЯЗАН быть. Причём максимально рано. И уж тем более до любых действий, которые потенциально могут привести к ошибке. pavel1381почему когда ошибка возникает On Error ее не перехватываетИменно поэтому. И это ещё облегчённый вариант проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2018, 15:40 |
|
On Error не работает
|
|||
---|---|---|---|
#18+
Все я разобрался, опытным путем))) я заменил GoTo m1 на Resume m1 и все работает, но я не понял почему??? почему именно resume? Select Case Err.Number Case 13 m = m + 1 w = Left(№кса, 2) + "/-Р-" + Right(Data, 2) If m = 1 Then 'GoTo m1 Resume m1 Else GoTo m2 End If ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2018, 15:50 |
|
On Error не работает
|
|||
---|---|---|---|
#18+
там где я читал про обработчик ошибок, про Resume объясняется на примере resume next и как я понял эта команда дает команду пропустить ошибку и выполнять программу дальше со следующей строки, ну и как выяснилось можно указать свою метку, ну а что еще он делает такого? то есть как перезагружает, возобновляет обработку ошибок, но почему она прервалась, вот что непонятно? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2018, 15:55 |
|
On Error не работает
|
|||
---|---|---|---|
#18+
pavel1381там где я читал про обработчик ошибок, про Resume объясняется на примере resume next и как я понял эта команда дает команду пропустить ошибку и выполнять программу дальше со следующей строкиХреново читал. Код: vbnet 1. 2.
Есть разница? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2018, 20:52 |
|
On Error не работает
|
|||
---|---|---|---|
#18+
Мне нравится пользоваться примерно такой конструкцией (заготовкой) обработчика ошибок. Почти во всех процедурах и функциях, как связанных с формами, так и обычных модулях. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2018, 13:44 |
|
On Error не работает
|
|||
---|---|---|---|
#18+
я конечно не все источники прочитал, но только в одном я нашел не совсем понятное объяснение: Примечания Если оператор On Error не используется, любая ошибка во время выполнения является неустранимой; то есть отображается сообщение об ошибке и выполнение остановится. «Включенный» обработчик ошибок — это свойство, включен режим оператор On Error ; обработчик ошибок «активно» — это включенный обработчик, который находится в процессе обработки ошибки. При возникновении ошибки во время активности между (возникновения ошибки) и оператор Resume, Exit Sub, Exit Functionили Exit Property обработчик ошибок, обработчик ошибок текущей процедуры не может обрабатывать ошибки. Управление возвращается в вызывающую процедуру. Если вызывающей процедуры есть включенный обработчик ошибок, он активируется для обработки ошибки. Если обработчик ошибок вызывающей процедуры уже активен, элемент управления передает назад по вызову описанной выше процедуры, пока не будет обнаружен обработчик ошибок включена, но неактивный. Если обработчик ошибок неактивных, включено не найден, сообщения о неустранимых в точке, где она реально возникла ошибка. Каждый раз, когда обработчик ошибок передает управление обратно вызывающей процедуре, эта процедура становится текущей процедуры. После окончания обработки ошибки обработчиком любой из процедур, выполнение возобновляется в текущей процедуре на момент, обозначенного оператор Resume . из этого я понял следующее: что обработчик ошибок может отловить только одну ошибку в промежутке между on erro и resume, если между on erro и resume возникнет еще одна ошибка то он в этот момент не активен, resume видимо не только возвращает нас к продолжению выполнения кода с указанной строки, но и перегружает сам обработчик ошибок... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2018, 15:46 |
|
On Error не работает
|
|||
---|---|---|---|
#18+
pavel1381из этого я понял следующее: что обработчик ошибок может отловить только одну ошибку в промежутке между on erro и resume, если между on erro и resume возникнет еще одна ошибка то он в этот момент не активен, resume видимо не только возвращает нас к продолжению выполнения кода с указанной строки, но и перегружает сам обработчик ошибок... Ну для базового понимания - достаточно. Как следствие, оператор Resume AkinaОБЯЗАН быть. Причём максимально рано. И уж тем более до любых действий, которые потенциально могут привести к ошибке.Иными словами - MsgBox это почти предел для кода обработчика ошибки. А то есть всякие... пионэры, которые в обработчике ошибок горят желанием переконнектиться к базе, записать ошибку в лог, или учинить ещё какую ерунду... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2018, 16:06 |
|
|
start [/forum/topic.php?fid=45&gotonew=1&tid=1611289]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
10ms |
get first new msg: |
7ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 318ms |
total: | 476ms |
0 / 0 |