Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Ошибка обработки ошибок... Добавлено: 17.04.07 11:52  

Автор вопроса:  demtruder
Всем привет!
Какая-то лажа с обработкой ошибок получается!
Подскажите, плз, если я чё не правильно делаю.



Sub Test()

    On Error GoTo End_Line
    Cells(6, 1).Resize(LastRow - 5, 25).Select

    On Error GoTo End_Line2
    Cells(6, 1).Resize(LastRow - 5, 34).Select

Exit Sub

End_Line:

    ******************************************

Exit Sub

End_Line2:

    ******************************************

Exit Sub

End Sub


На Resize вылазит ошибка Run-time(1004).
Это понятно, ибо LastRow = 5 (иногда), и Resize(0)не может выполнится.

Так вот, первый ресайз при ошибке переходит на обработку ошибки, а второй - если на первом не было ошибки - всё-равно выдаёт сообщение об ошике и выполнение макроса преостанавливается!

Подскажите, плз, в чём может быть дело?

Заранее благодарен!

Ответить

  Ответы Всего ответов: 10  

Номер ответа: 1
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #1 Добавлено: 17.04.07 12:20
On Error GoTo End_Line2

Это лишнее. Ссылка на обработчик ошибок должна быть одна.
Последний Exit Sub тоже на хрен не нужен.

Ответить

Номер ответа: 2
Автор ответа:
 Боцман



ICQ: 295725312 

Вопросов: 53
Ответов: 830
 Web-сайт: Rus-Skipper.narod.ru
 Профиль | | #2
Добавлено: 17.04.07 12:38
Интерестно, а первый Exit Sub разве нужен?

Ответить

Номер ответа: 3
Автор ответа:
 demtruder



Вопросов: 6
Ответов: 12
 Профиль | | #3 Добавлено: 17.04.07 12:43
Дело в том, что мне необходимо выполнить вторую команду (с ресайзом) даже в том случае, если вылазит ошибка на первой команде.
Т.е., второй ресайз находится после End_Line. Если ина нем вылази ошибка, то необходимо перейти к выполнению кода после End_Line2...

А насчёт последнего Exit Sub'а согласен - он нарен не нужен.

Ответить

Номер ответа: 4
Автор ответа:
 demtruder



Вопросов: 6
Ответов: 12
 Профиль | | #4 Добавлено: 17.04.07 12:47
Первый Exit Sub нужен для прерывания выполнения кода, если ошибок не вылезло. В противном случае, после выполнения основного кода будет выполнятся код обработки ошибок.

Ответить

Номер ответа: 5
Автор ответа:
 GenyaA



Вопросов: 0
Ответов: 185
 Web-сайт: www.genyaa.nm.ru
 Профиль | | #5
Добавлено: 17.04.07 13:01
Честно говоря, я не вижу, каким образом могло бы быть так, чтобы при НЕошибочном выполнении первого resize был бы ошибочным второй, если между ними LastRow не меняется... Я прогнал Ваш пример - никаких ошибок не возникает при LastRow >=6.

Ответить

Номер ответа: 6
Автор ответа:
 demtruder



Вопросов: 6
Ответов: 12
 Профиль | | #6 Добавлено: 17.04.07 13:24
Дело в том, что этот код не не полный, и я опустил большую его часть. Дело в том, ресайзы выполняются на разных листах, и, соответственно, различные LastRow.

К сожалению, значение LastRow иногда составляет 5, из-за чего и вылетает ошибка. Просто в этом случае лист не содержит данных для обработки ( а 5 - потому как используется шаблон).

Ответить

Номер ответа: 7
Автор ответа:
 GenyaA



Вопросов: 0
Ответов: 185
 Web-сайт: www.genyaa.nm.ru
 Профиль | | #7
Добавлено: 17.04.07 13:37
ресайзы выполняются на разных листах... различные LastRow

;-) ...

В конце концов поставьте вместо On Error

If LastRow < 6 then GoTo End_Line 'для первого
If LastRow < 6 then GoTo End_Line2 'для второго

(Я бы лично и GoTo не использовал бы, а делал бы всё через else - мне было бы самому понятней, а значит и отладка была бы проще.)

Ответить

Номер ответа: 8
Автор ответа:
 demtruder



Вопросов: 6
Ответов: 12
 Профиль | | #8 Добавлено: 17.04.07 13:46
Йобт! Вот это я наворотил с On Error'ами! Как говорится, будь проще, и люди к тебе потянутся!

Очень хорошая идея! Так действительно намного нагляднее!Благодарю!

P.S. А всё-таки интересно, чего вторая ошибка не перехватывается?

Ответить

Номер ответа: 9
Автор ответа:
 GenyaA



Вопросов: 0
Ответов: 185
 Web-сайт: www.genyaa.nm.ru
 Профиль | | #9
Добавлено: 17.04.07 13:55
P.S. А всё-таки интересно, чего вторая ошибка не перехватывается?

Не думаю, что можно что-то сказать определенное, если мы не знаем, как у Вас LastRow вычисляется...

(Опять же есть мое личное мнение - более одного Select на одну решаемую задачу - это грубо и требует оптимизации.)

Ответить

Номер ответа: 10
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #10 Добавлено: 18.04.07 03:14
Жуть... что топстартер, что отвечающие :)

sub ()
on error goto e

exit sub
e:
select case err.number

  case 53
   msgbox "file not found"

  '...
end select

end sub

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам