Страницы: 1
RSS
Как узнать в какой строке возникает ошибка если модуль запаролен?, Обработчик ошибок
 
Когда-то давно я написал небольшую программку ещё на 2003 офисе. Потом вносил небольшие корректировки но уже на 2007. Сейчас возникла ситуация когда эта программа перестала работать на 2003. Проблема в том, что пользователю я передаю файл с запароленным кодом. У него при запуске выскакивает ошибка, но где именно непонятно. Глазами сравнил версию работающую под 2003 и версию с ошибкой - никакого криминала не нашел: никаких новых функций и т.п.
Передавать пользователю программу с открытым кодом не хочется. Можно ли сделать обработчик ошибок который напишет именно строку кода в которой возникает ошибка?
Не стреляйте в тапера - он играет как может.
 
нет, так просто обработчик ошибок не сделать

Есть 3 варианта:
надо либо делать полноценный обработчик ошибок (предусматривать все возможные ошибки, с выводом понятного сообщения по каждой),
либо искать ошибку на файле без пароля (например, подключившись к проблемному компу через TeamViewer),
либо у себя установить свежую версию Excel и поискать ошибку на своём компе.
 
Есть и третий вариант:
спец.программой(типа MZTools) пронумеровать все коды в проекте. Далее во всех кодах установить обработки ошибок. Вроде такой:
Код
On Error GoTo Err_Handler
'здесь основной код
Err_Handler:
MsgBox "Ошибка " & Err.Number & " (" & Err.Description & ") в процедуре 'ИмяПроцедуры' модуля 'ИмяМакроса'" & IIf(Erl <> 0, " в строке " & Erl, "")

Erl - специальный объект, который отвечает за номер строки, в которой произошла ошибка.

Далее проект можно паролить и отсылать заказчику - пусть запускает и скинет Вам текст ошибки.
Изменено: The_Prist - 11.05.2016 11:50:27
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Игорь, у меня-то как раз более свежая версия (2010), чем у пользователя (2003). Просто я посмотрел свойства Err и не нашел возможности сообщать именно текст строки с ошибкой.
Про вариант удалённого доступа я уже думал, но не знаю есть ли он у пользователя.
Не стреляйте в тапера - он играет как может.
 
Установите себе 2003 ексель и прогоните код.  
 
The_Prist, Дим, так ты узнаешь номер ошибки(не строки) и ее описание. :)
Чето типа:
Код
MsgBox Err.Description & vbCrLf & _
           "на VBAProject.Лист1.AddComm " & _
           "в строке " & Erl, _
           vbExclamation + vbOKOnly

P.S. упс, не увидел конец строки у Димы, надо было ползунок двинуть..
Изменено: kuklp - 11.05.2016 12:06:04
Я сам - дурнее всякого примера! ...
 
Цитата
kuklp написал:
так ты узнаешь номер ошибки(не строки) и ее описание
Сергей, смотри код внимательнее и мое описание:
Цитата
The_Prist написал:
Erl - специальный объект, который отвечает за номер строки, в которой произошла ошибка.
Прикладываю вариант крохотного кода с демонстрацией
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дим, я потом дописал свой пост (P.S.), увидел ползунок :)
Я сам - дурнее всякого примера! ...
 
а я твою дописку увидел тоже после того как выложил файл :)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, большое спасибо! Но к сожалению я только сейчас обратил внимание, что ошибка не Type mismatch (и т.п.), а


И дело даже оказалось не в версии, а в отсутствии библиотеки на компе пользователя. Просто в своё время я экспериментировал с печатью двумерных штрихкодов в этой программе и подключил соответствующую библиотеку (она установлена практически на всех компах предприятия), но на компе данного пользователя её не было. А т.к. эксперимент себя не оправдал, я из кода убрал все обращения к процедурам библиотеки, но саму библиотеку отключить забыл. Теперь всё работает.

Всё равно большое спасибо за идею вылавливания ошибки - пригодится на будущее. И вопрос на эту тему: можно ли указать вместо "Имя процедуры" переменную в которой храниться имя выполняемой процедуры или функции?
Не стреляйте в тапера - он играет как может.
Страницы: 1
Наверх