Почему не срабатывает исключение?

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Ivan093
Сообщения: 54
Зарегистрирован: 28 июн 2007, 13:59
Откуда: Екатеринбург
Контактная информация:

Привет всем!
Есть код, где в цикле открываются файлы, но бывает что файл открыть не получается, тогда нужно его пропустить. Написал примерно так

On Error GoTo L1
Workbooks.Open (Files(n)), UpdateLinks:=0
<Действия с файлом>
L1:

Но эксель все равно выкидывает окошко, если не может открыть файл.
Подскажите, пожалуйста, как сделать, чтобы эксель просто пропускал файл.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Хм, действительно не срабатывает...
Попробовал так:

Код: Выделить всё

For i = 1 To 10
On Error GoTo L1
  Workbooks.Open "qweqwe", UpdateLinks:=0
'something
L1:
On Error GoTo 0
Next
потом так

Код: Выделить всё

On Error GoTo L1
For i = 1 To 10
  Workbooks.Open "qweqwe", UpdateLinks:=0
'something
L1:
Next
Одинаково. В результате на первой итерации проходит обработка исключения, а на второй итерации не проходит.
Т.е. если это стоит в цикле то после первой итерации перестает работать...
Странно....

PS
Excel 2003.
Ivan093
Сообщения: 54
Зарегистрирован: 28 июн 2007, 13:59
Откуда: Екатеринбург
Контактная информация:

Сделал так, работает как надо:

On Error Resume Next
Workbooks.Open (Files(n)), UpdateLinks:=0
If Err.Number = 0 Then
On Error GoTo L1
<Действия с файлом>
End If

L1:
Err.Clear
On Error GoTo 0
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Хорошо...
Но вопрос темы остался открытым: "почему"...
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Так будет работать

Код: Выделить всё

Public Sub test()
    Dim i As Integer
    On Error Resume Next
    For i = 1 To 10
        Workbooks.Open "qweqwe", UpdateLinks:=0
        If Err <> 0 Then
            Debug.Print "Ошибка"
            Err.Clear
        Else
            Debug.Print "OK"
        End If
    Next i
End Sub
Андрей Энтелис,
aentelis.livejournal.com
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

A! Err.Clear надо делать!
Поэтому и не работало со второй итерации.
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Да нет. Не всё так просто.
в конструкции

Код: Выделить всё

Public Sub test()
    Dim i As Integer
    
    For i = 1 To 10
        On Error GoTo L    
        Workbooks.Open "qweqwe" & Str(i), UpdateLinks:=0
        GoTo NXT
L:     Debug.Print "Ошибка " & Str(i)
        Err.Clear
NXT:
    Next i
End Sub
Err.clear не спасает :(
Похоже ошибка реализации
Андрей Энтелис,
aentelis.livejournal.com
Ответить