Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.15.143.207] |
|
Сообщ.
#1
,
|
|
|
Проблема в том что стандартная обрабока типа
on error goto ... не работает в цикле. например когда одна и таже ошибка повторяется более одного раза обработчик ошибок не работает, а ошибка вылетает от самого компилятора!!! For c = 1 To 2 On Error GoTo 2 ChDir ("111") 2: Next c Вот на этом простом примере если доступа к данной папке нет то при таком раскладе компилятор выкидывает ерор. Если сделать цикл от 1 до 1, то есть повтор один раз то обработчик срабатывает. Как сделать так что бы обработка происходила независимо от количества попыток доступа к данной папке |
Сообщ.
#2
,
|
|
|
Private Sub Form_Load() sub1: On Error GoTo erh q = 0 a = 1 / q GoTo sub2 erh: q = 1 Resume sub2: On Error GoTo erh2 a = 1 / 0 Exit Sub erh2: Resume Next End Sub выполни этот код построчно (нажимая F8), поймёшь фишку. (пока не сделал возврат из обработки, новые ошибки обрабатывать нельзя.) в данном случае - оцени конструкцию вида Debug.Print LCase(Dir("c:\windows", vbDirectory)) = LCase("windows") |
Сообщ.
#3
,
|
|
|
Если код позволяет, то можно попробовать так:
Option Explicit Private Sub Form_Load() Dim i As Long For i = 1 To 10 Call ERRinside(i) 'здесь любые действия не вызывающие ошибок MsgBox i & ": итерация успешна" Next i End End Sub Private Sub ERRinside(ByVal lArg As Long) Dim dummy As Long On Error GoTo ERR_LBL dummy = lArg / 0 'здесь любые другие действия с ошибками ERR_LBL: 'здесь обработка ошибок MsgBox lArg & ": ошибка обработана" End Sub |
Сообщ.
#4
,
|
|
|
Все я понял главное сделать resume next и вся проблема решается. Большое спасибо
|
Сообщ.
#5
,
|
|
|
On Error Resume Next For c = 1 To 2 Call ChDir("111") If Err.Number <> 0 Then Call Err.Clear GoTo 2 End If 2: Next c |