|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
26.10.2010, 12:18 | #1 |
Форумчанин
Регистрация: 02.07.2009
Сообщений: 122
|
перехват ошибок vba, excel
Всем доброго здравия!
Есть ли возможность перехвата ошибок vba и Excel извне (не из модулей кода)? Проблема коротко вот в чем. У меня довольно большая надстройка, использующая как листы (данные и вычисления), так и формы (6 форм с количеством элементов около 1000). Надстройка при пуске меняет пользовательский интерфейс листов и приложения, причем выход из приложения возможен только по конкретной клавише одной из форм. Проект защищен паролем. При появлении ошибки vba - в проект не попасть и, соответственно, не выйти из программы, нажав end в сообщении. Все виснет. Есть п/п восстановления интерфейса, есть п/п корректного выхода, к которым можно адреснуться по ошибке, но как ее отловить? Среди событий, которые отлавливает приложение - что-то таких не нашел. Вставлять в каждую процедуру On ERROR Go To - свихнешься, да и некрасиво. Дайте совет, к чему можно прицепиться? С уважением |
26.10.2010, 13:02 | #2 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
ничего не красивого в On ERROR Go To не вижу.
не красиво писать код, в котором возникают ошибки... если ошибки из-за кода - то все в ваших руках, если из-за данных от пользователя - проверьте сначала, что получили прежде, чем обрабатывать
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
26.10.2010, 13:15 | #3 |
Форумчанин
Регистрация: 02.07.2009
Сообщений: 122
|
Хотелось бы совет по существу, IgorGo!
Даже тщательное бета-тестирование от дурных ошибок не спасает, самых неожиданных! Пример: один из тестеров в TextBox формы (окно ПРИМЕЧАНИЯ) ввел первым символом текста знак "=" При записи такого "текста" в ячейку листа (variant) - приехали! Все, что при тестировании проявляется, естественно, обхожу, но.... А тех, кто тестирует, напрягать лишний раз мне ни к чему. Да и явно должна быть возможность отловить ошибки "снаружи" - окно-то дебугера выскакивает |
26.10.2010, 15:14 | #4 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
в данном случае помогает On Error Resume Next
ставите эту директиву первой строкой в процедуре, а последней строкой проверяете, всё ли прошло гладко: Код:
|
26.10.2010, 16:21 | #5 |
Форумчанин
Регистрация: 02.07.2009
Сообщений: 122
|
Да я понимаю, EducatedFool, обработчиков ошибок в сложных или сомнительных процедурах у меня много наставлено. Только воткнуть эти две (или только первую) команды в сотни оставшихся процедур - кошмар. Могу, конечно, и автоматизировать вставку...
Но хотелось бы убедиться, что иных вариантов нет - через скрипты (потоки объектов), API (тип диагностического окна) или еще как-нить ?? |
26.10.2010, 17:10 | #6 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
ИМХО все процедуры VBA Excel долны быть написаны правильно и не вызывать ошибок.
Перехват (On Error ...) допустимо (рекомендуется) применять только умышленно, для определения особых условий. Если возможна непредвиденная ошибка, ИМХО значит Вы ее не предвидели и не предприняли мер для того, чтобы ее не допустить.
Чем шире угол зрения, тем он тупее.
|
26.10.2010, 18:24 | #7 | |
Участник клуба
Регистрация: 28.06.2009
Сообщений: 1,950
|
Цитата:
|
|
27.10.2010, 10:59 | #8 |
Форумчанин
Регистрация: 02.07.2009
Сообщений: 122
|
Доброго дня всем!
«Все процедуры VBA Excel долны быть написаны правильно и не вызывать ошибок.»…бла, бла, бла… Эта красивая фраза порождает у меня массу еще более красивых фраз, которые правила сайта, к сожалению, не позволяют опубликовать. Я, собственно, этим и занимаюсь, готовя бета-тестирование. Но каково уважаемым тестерам (не программистам!), работая в варианте бесплатной услуги с новым продуктом, подвеситься из-за какой-то непредвиденной глупости!? На мой взгляд, тоже ни к чему втыкать в сотни процедур обработчики ошибок «на всякий случай», хотя, повторюсь, это можно сделать и программно (автоматически). Думаю, что ляп в моем продукте остались единицы, но ведь какие-то и при тестировании могут не обнаружиться и вылететь потом, что еще хуже. Вот и хочется предохраниться от последних разумным способом. Рассуждаю так: Application при инсталлированной надстройке у меня прописан в модуле класса и видит все окна, кроме своего. Использую его для синхронизации видимости форм надстройки с книгами Excel. Когда VBA обнаруживает ошибку, выкидывается его окно, которое, вроде как должно относиться к CommandBars и иметь свой ID, привязанный к VBProject конкретной книги. Например, окно свойств проекта имеет ID:=2578 (тип того же окна: Application.ActiveWorkbook.WBProjec t.VBE.Window.Type = 6). Распознав окно, им можно попробовать манипулировать с помощью SendKeys, а также, если это (модальное) окно удастся закрыть, реализовать корректный выход из программы и (или) восстановление пользовательского интерфейса Excel и книг. Правда, еще остается ошибка Excel – тут либо скрипты, либо API, но всему свое время… Может кто хотя бы знает ID или Type окна сообщения об ошибке VBE? ЗЫ: с исключением недопустимых символов из вводимого текста на данном форуме мы уже отработали варианты. Я счел более удачным до записи данных программно преобразовывать формат ячейки листа в текстовый. |
27.10.2010, 11:50 | #9 | ||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Цитата:
Ошибка...окно...CommandBars...VBPro ject...SendKeys - между всем этим связи вообще никакой. Цитата:
В нормально написанной программе (на любом языке программирования), обрабатывающей вводимые пользователем данные, около 50% кода - это обработчики ошибок. Вы же, сделав только половину работы, хотите найти простое решение в пару строк кода. Так не бывает... |
||
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
VBA Word,VBA Excel решить 2 задачи | fafolo4ka | Фриланс | 6 | 05.03.2012 01:15 |
Перехват ошибок компилятора | Яр|/||< (^_^) | Общие вопросы Delphi | 4 | 27.03.2010 16:07 |
Нужен специалист по VBA для исправления ошибок в существующей БД | Dorfooz | Фриланс | 7 | 11.11.2009 22:01 |
Как запретить запуск программы на VBA Excel 2003 в Excel 2007 | kovalevskivf | Microsoft Office Excel | 2 | 15.05.2009 16:47 |
Перехват ошибок от Windows | DRUNE | Софт | 2 | 09.04.2009 13:24 |