Страница: 1 | 2 |
Вопрос: On error
Добавлено: 09.09.09 11:02
Автор вопроса: fifa36
Здравствуйте!
Поделитесь знанием как соглусуются различные on error в коде, до куда они действуют и т д.
Например:
sub mysub()
on error goto
on error resume next
metka:
end sub
После on error resume next, on error goto потеряет свою силу?
Ответы
Всего ответов: 27
Номер ответа: 1
Автор ответа:
Aston
ICQ: 214-179-991
Вопросов: 42
Ответов: 272
Профиль | | #1
Добавлено: 09.09.09 11:24
Правильно, если возникнет ошибка, то сработает только on error goto metka:, и строка on error resume next не будет иметь смысла, так как при ошибке и когда ошибки нет она не используется. Она будет иметь смысл только в том случае если метка будет стоять перед ней и строка on error resume next будет использоваться для отлова возникновения последующих ошибок а не 1.
Номер ответа: 2
Автор ответа:
fifa36
Вопросов: 33
Ответов: 116
Профиль | | #2
Добавлено: 09.09.09 12:25
Вы знаете я вот поэксперементировал у меня после "on error resume next" "on error goto metka" как бы отключился и после ошибки он стал на след. строчку переходить несмотря на то что метка стоит после "on error resume next".
Номер ответа: 3
Автор ответа:
fifa36
Вопросов: 33
Ответов: 116
Профиль | | #3
Добавлено: 09.09.09 12:29
В чем проблема?
Номер ответа: 4
Автор ответа:
fifa36
Вопросов: 33
Ответов: 116
Профиль | | #4
Добавлено: 09.09.09 12:29
В чем проблема?
Номер ответа: 5
Автор ответа:
fifa36
Вопросов: 33
Ответов: 116
Профиль | | #5
Добавлено: 09.09.09 12:36
блин ваще бред теперь
Номер ответа: 6
Автор ответа:
GDK
Вопросов: 13
Ответов: 348
Профиль | | #6
Добавлено: 10.09.09 11:23
Разбирайся.
Вывод: Получается, что при использовании on error goto metka необходимо чтобы в коде обработки ошибок не было ещё ни одной ошибки.
Номер ответа: 7
Автор ответа:
fifa36
Вопросов: 33
Ответов: 116
Профиль | | #7
Добавлено: 10.09.09 13:02
Ок! Спасибо буду разбираться! А как же тогда в цикле обрабатывать одну и ту же ошибку? При первом появлении ошибки goto срабатывает а на следующих итерациях если возникнет опять ошибка, то она вылезает! как быть??
Номер ответа: 8
Автор ответа:
Smith
ICQ: adamis@list.ru
Вопросов: 153
Ответов: 3632
Профиль | | #8
Добавлено: 10.09.09 15:38
Да никак, гугли чтиво, читай и вникай, щас название непомню давно это было.
Это у тебя ещё ерунда, всё в одной процедуре, а ведь обработчик и на подпроцедуры действует.
Короче, в вба/вб6 нет вменяемой обработки ошибок
Номер ответа: 9
Автор ответа:
GDK
Вопросов: 13
Ответов: 348
Профиль | | #9
Добавлено: 10.09.09 18:25
Короче, в вба/вб6 нет вменяемой обработки ошибок
Потому я стараюсь не пользоваться этим. Максимум On Error Resume Next, On Error GoTo 0.
fifa36, давай код нормальный, подробный, с комментами - что хотелось бы видеть. Тогда можно будет подумать как реализовать. А так непонятно что требуется. И ещё учись писать легко читаемый, понятный, легко модифицируемый код.
PS Думать надо ПОБОЛЬШОМУ (:
Номер ответа: 10
Автор ответа:
fifa36
Вопросов: 33
Ответов: 116
Профиль | | #10
Добавлено: 11.09.09 14:21
Ну вот мне надо следующее: ечли ошибка при открытии файла то идти к следующему файлу, если же дошел до записи строки по полям где у меня On Error Resume Next то если не смог записать поле то чтобы шел на следующую строчку
Номер ответа: 11
Автор ответа:
GDK
Вопросов: 13
Ответов: 348
Профиль | | #11
Добавлено: 11.09.09 20:29
Так. Для начала лучше вынести открытие файла в отдельную процедуру, записывание в рекордсет в другую отдельную процедуру.
В процедуре открытия пишешь обработчик ошибки, эта процедура(кстати она должна фанкцией быть) должна вернуть Труе при успешном открытии или фалзе при ошибке. В зависимости от этого код в цикле будет выполнять процедуру записи в рекордсет либо ни фига не делать или делать Debug.Print "Ошибка открытия файла" & filename. В процедуре записи в рекордсет тоже можно предусмотреть обработчик ошибок и возврат чего нибудь в зависимости от наличия ошибки.
Если нужно высокое быстродейтвие то передавай параметры в виде глобальных переменных, а не в виде аргументов функции.
Сделаешь сам? Думаю да. В понедельник гляну в тему, но не обещаю. Но тут много добрых людей. Если чё помогут.
Это был один из вопросов показывающих как логика программы может быть ограничена тем что в VB плохо продумана обработка ошибок.
Учись делить код на несколько мелких процедур и почувствуешь удобство и сократится время на рутину. Думаю профессионалы согласятся со мной. Напоминаю про возможность применять ООП в VB, не думаю что просидишь долго только на VB, а начальные знания ООП пригодятся в др. языках - высказывание на суд профессионалам.
Номер ответа: 12
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #12
Добавлено: 12.09.09 00:07
PS Думать надо ПОБОЛЬШОМУ (:
ПОБОЛЬШОМУ другое делают. Хотя, если разницы нет...
PS: Я шутю
Номер ответа: 13
Автор ответа:
fifa36
Вопросов: 33
Ответов: 116
Профиль | | #13
Добавлено: 14.09.09 09:12
GDK спасибо за советы! думаю сделаю сам!) А к чему ты говоришь про "ООП"? Это объектно ориентированное программирование? Как оно помогло бы здесь? Кстати кто знает почему на форуме нет поиска?? Оч неудобно( А еще скажите пару слов что такое VB. NET?
Номер ответа: 14
Автор ответа:
GDK
Вопросов: 13
Ответов: 348
Профиль | | #14
Добавлено: 14.09.09 10:32
ООП помогло бы ваще, не только здесь, будет удобнее писать, как следствие будет меньше ошибок. Во многих случаях будет проще модифицировать код, исправлять ошибки. Поиск есть. Только в стиле "через зад", да простят меня модераторы, но факт есть факт. Заходишь в форум, кликаешь любую тему, находишь окно, в котором обычно пишешь ответ, под кнопкой "Сохранить" найдешь что хотел.
Номер ответа: 15
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #15
Добавлено: 14.09.09 12:42
Если нужно высокое быстродейтвие то передавай параметры в виде глобальных переменных, а не в виде аргументов функции.
Каким образом в VBA это может сказаться на быстродействии хотя бы сколько-нибудь ощутимо?
Это был один из вопросов показывающих как логика программы может быть ограничена тем что в VB плохо продумана обработка ошибок.
Готовься, сейчас кто-то тебя закидает шишками
http://en.wikipedia.org/wiki/Visual_Basic_.NET
На данный момент это единственная реализация языка Basic, которую есть смысл изучать