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

Суть задачи довольно проста: в 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
Не работает On Errors
    #38610412
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обработка ошибки должна заканчиваться Resume
Иначе вторая ошибка возникает внутри обработчика первой ошибки и уже не отслеживается
читаем хелп по On Error
...
Рейтинг: 0 / 0
Не работает On Errors
    #38610420
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вообще, устроили ПОМОЙКУ в коде, какие-то метки, куча 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
Не работает On Errors
    #38610428
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, наверное
Код: vbnet
1.
NewWorkBook.Sheets("XXX").Activate


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

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

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


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