Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Не работает On Errors / 9 сообщений из 9, страница 1 из 1
09.04.2014, 19:10
    #38610402
muzikizum
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает On Errors
Всем привет.

Суть задачи довольно проста: в Excel-файле (1) в ячейках D4:D18 указаны пути к файлам (N).
Макрос должен пооткрывать эти файлы и в файле 1 проставить в ячейках напротив каждого пути значения "Ок" или "Не найдено" в зависимости от того, найден ли файл.

Смоделирована ситуация, когда нет 1-го и 5-го по счету файлов. Обнаружив отсутствие 1-го файла макрос корректно проставляет "Не найдено" (срабатывает OnErrors). Но почему-то, когда доходит до открытия 5-го файла, вместо действия по OnErrors Excel выдает обычную ошибку Run Time Error '1004'.

Подскажите, пожалуйста, почему работает не так, как задумано? :)

Собственно, код:
Код: 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.
Sub Reports_load()

Begin:
Range("E4:E18").Select
Selection.Delete
Range("X1").Value = 3

Opening:
On Error GoTo Errors1

Range("X1").Value = Range("X1").Value + 1

Dim Status As Integer
Dim Destination As Integer
Status = Range("X1").Value
Destination = Range("X1").Value

 Sheets("Select_form").Activate
 adr = Cells(Destination, 4)
 Workbooks.Open Filename:=adr
 Sheets("XXX").Activate
 ActiveWorkbook.Close
 Cells(Status, 5).Value = "ОК"

If Range("X1").Value = 17 Then
GoTo Ends
Else
GoTo Opening
End If

Errors1:
    Cells(Status, 5).Value = "Не найдено"
GoTo Opening
Ends:
End Sub
...
Рейтинг: 0 / 0
09.04.2014, 19:22
    #38610412
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает On Errors
Обработка ошибки должна заканчиваться Resume
Иначе вторая ошибка возникает внутри обработчика первой ошибки и уже не отслеживается
читаем хелп по On Error
...
Рейтинг: 0 / 0
09.04.2014, 19:33
    #38610420
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает On Errors
И вообще, устроили ПОМОЙКУ в коде, какие-то метки, куча goto (простите, не сдержался):

Код: 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.
Sub Reports_load()

Dim Status As Integer
Dim Destination As Integer
Dim NewWorkBook As WorkBook

Range("E4:E18").Delete
Range("X1").Value = 3

Do
  Range("X1").Value = Range("X1").Value + 1
  Status = Range("X1").Value
  Destination = Range("X1").Value

  adr = Sheets("Select_form").Cells(Destination, 4)
  On Error Resume Next
  Set NewWorkBook = Workbooks.Open(Filename:=adr)
  If Err<>0 Then
    Sheets("XXX").Activate
    If Err<>0 Then
      Cells(Status, 5).Value = "ОК"
    Else
      Cells(Status, 5).Value = "Лист ХХХ не активируется"
    End If
    On Error Goto 0
    NewWorkBook.Close
  Else
    On Error Goto 0
    Cells(Status, 5).Value = "Файл не открывается"
  End If
Loop Until Range("X1").Value = 17
    
End Sub
...
Рейтинг: 0 / 0
09.04.2014, 19:44
    #38610428
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает On Errors
Вообще, наверное
Код: vbnet
1.
NewWorkBook.Sheets("XXX").Activate


или я вообще не понял смысл того, что вы хотели сделать с этим листом и в какой книге он должен находиться
...
Рейтинг: 0 / 0
10.04.2014, 11:39
    #38610929
muzikizum
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает On Errors
Shocker.Pro, спасибо, но в Вашем коде также не удалось разобраться. И он, кстати, не работает :(

Может быть, есть какой-то более цивилизованный способ собрать статусы по наличию файлов, не открывая их?
...
Рейтинг: 0 / 0
10.04.2014, 11:44
    #38610941
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает On Errors
muzikizumтакже не удалосьв смысле? в собственном коде вы тоже не разобрались?
muzikizumИ он, кстати, не работаетя не проверял, я попытался показать, как его написать более структурно и несколько упростить. в итоге, не понял, что там у вас за активация листа XXX
muzikizumМожет быть, есть какой-то более цивилизованный способ собрать статусы по наличию файлов, не открывая их?Конечно. Функция Dir
...
Рейтинг: 0 / 0
10.04.2014, 12:03
    #38610987
i45
i45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает On Errors
muzikizum,

Уберите метки и goto кроме того, который с on error. Последний надо перенести наверх. Уберите код, активирующий worksheets, он не нужен. Пишите все с полным явным путем - если cells, то какого шит, если шит, то из какой бук... если ранг, то тоже - из какого шит. Все декларации перенесите вверх и не используйте недекларированные переменные.

private sub...

dim oSheet as worksheet
dim oRange as Range

on error goto methodexit

...
set oSheet = thisworkbook.Worksheets("Ogogogo")
set oRange = oSheet.Range("A1")
code, code, code...

methodexit:

if err.number <> 0 then

end if

end sub
...
Рейтинг: 0 / 0
10.04.2014, 12:15
    #38611013
i45
i45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает On Errors
muzikizum,

И это не айс использовать on error, чтобы выяснить, есть файл или нет файла. Используйте Scripting.FileSystemObject.
...
Рейтинг: 0 / 0
14.04.2014, 18:47
    #38614648
muzikizum
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает On Errors
Всем спасибо за подсказки! В итоге, наверное, в коде все же "помойка", но вроде все работает :) Правда, от "GoTo" уйти не удалось :)
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Не работает On Errors / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]