В процессе автономной работы Excel-приложения периодически возникают ошибки вида "Run-time error" (пример во вложенной фотографии) - из-за этого останавливается выполнение макросов и всего файла в целом. После нажатия кнопки "End" на всплывающем окне всё нормализуется до следующего появления подобной ошибки.
Прошу вас, по возможности, уточнить: можно ли как-то прописать в макросах, VBA-коде книги или листов универсальную команду, чтобы при появлении подобных и любых других ошибок они автоматически обрабатывались и работа Excel не прекращалась?
при появлении подобных и любых других ошибок они автоматически обрабатывались
а вот это как раз и надо будет прописать - как именно их обрабатывать. ибо просто пропускать (как это делаете вы сейчас) - не всегда приведет к "всё нормализуется".
фрилансер Excel, VBA - контакты в профиле "Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
Сама ошибка означает отсутствие у Вас доступа. К чему - Вам виднее. И простое игнорирование ошибки может в дальнейшем еще аукнуться. Поэтому надо точно знать, что именно этого хочется.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
The_Prist, я предполагаю, что отсутствие доступа возникает потому, что различные макросы импортируют данные из одного и того же текстового файла: когда в какой-то момент они это делают одновременно, именно тогда, как мне кажется, и случается ошибка с доступом, ибо файл, занятый одним из макросов, становится недоступным для других. Подправьте меня, если считаете, что это не может являться причиной. В таком случае, необходимо, чтобы тот или иной макрос при наступлении ошибки перевыполнялся вплоть до успешного раза. Соответственно, наиболее безопасным мне представляется, согласно совету ikki, проставить в макросах следующие строки: в начале
Код
On Error Resume Next
в конце
Код
On Error GoTo 0
Простейший пример решения данной проблемы - во вложенной фотографии. Если есть более надёжный вариант, прошу написать.
я предполагаю, что отсутствие доступа возникает потому, что различные макросы импортируют данные из одного и того же текстового файла: когда в какой-то момент они это делают одновременно, именно тогда, как мне кажется, и случается ошибка с доступом
Сомневаюсь: не должны два макроса одновременно запуститься.
"Юрий М: не должны два макроса одновременно запуститься." Разве что с разных машин. Тогда есть смысл добавить проверку на занятость файла. Но мы опять гадаем.
я этого не советовал! просто проставить эти операторы в начале и конце кода и на этом успокоиться - можно. но чревато. надо разбираться - какие именно ошибки, в каком месте кода, в каких случаях и что с ними делать.
например, для случая "одновременного" обращения к занятому файлу можно поставить небольшой цикл с оговоренным временем повторных попыток чтения, результат - опять же обрабатывать и, к примеру, если за ранее определенный промежуток времени файл открыть не удвлось - честно предупреждать пользователя и завершать работу. а у вас не пойми что получается - попробовали прочитать файл - он занят - ну и фиг с ним - проигнорировали ошибку и пошли дальше, как будто всё нормально.
чего-то многовато я понаписал... и ведь всё - очевидные вещи
фрилансер Excel, VBA - контакты в профиле "Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
ikki, кстати, именно цикл с временем и помог. Как раз так я и идентифицировал проблему с доступом. В этой фразе "согласно совету ikki" имелось в виду "порекомендовал нужные функции" . Именно для того, чтобы исключить проиллюстрированный Вами случай
Цитата
попробовали прочитать файл - он занят - ну и фиг с ним - проигнорировали ошибку и пошли дальше, как будто всё нормально.
и используется в конце строчка
Код
On Error GoTo 0
чтобы макрос при возникновении ошибки не "пошёл дальше", а перезапустился заново.
ikki, именно с неё я и начал. И всегда рекомендую всем это делать. Если у Вас есть более корректное, чем приведённое выше, решение обработки некритических ошибок в макросах, требующее лишь их перезапуска, прошу привести пример. Возможно, нижняя строчка "On Error GoTo 0" необязательна и достаточно лишь добавить верхнюю "On Error Resume Next"?
обычно советуют поступать примерно так: перед участком кода, могущем вызвать ошибку указанного вами типа, пишем:
on error resume next ' далее - код (как правило - один оператор/функция if err>0 then exit sub ' ошибка таки произошла. выходим из процедуры on error goto 0 ' в общем случае - необязательно, обычно нужно в процессе отладки. особенно если в вашем коде могут быть совсем другие ошибки. а без отключенного обработчика - они все будут игнорироваться и вы ничего толком не сможете проверить.
фрилансер Excel, VBA - контакты в профиле "Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг