Страницы: 1
RSS
Excel вылетает при выполнении макроса, когда экран заблокирован, но не вылетает при разблокированном экране
 
Коллеги, всем привет!
Заранее спасибо за вашу помощь!
У меня есть макрос, который открывает книгу с моделью данных Power Pivot, обновляет её, копирует с каждого из 7 листов значения в новую книгу, закрывает книгу с моделью данных Power Pivot. Затем выставляет фильтры в книге, в которую копировали значения, снова копирует данные в новую книгу, сохраняет, закрывает и отправляет её через Outlook ответственным лицам. Всего около 120 писем.
Проблема в том, что если я запускаю его вручную, то он отрабатывает нормально и рассылает все письма, а вот если я блокирую экран и запускаю этот процесс через диспетчер задач, либо прописываю в коде Application.OnTime, то отправляется всего около 20 писем и Excel выдаёт сообщение "Работа Excel прекращена" и больше ничего не происходит.
Уточнение: Excel 2016 32bit, Windows 10 64bit, 8GB оперативки.
Не подскажете, в чём может быть проблема?
Кто-нибудь сталкивался с подобным?
 
Здравствуйте! А что Вы имеете в виду под термином "блокирую экран"?
Если свойство

Код
Application.Visible=False

то проблемы точно бывают.
Владимир
 
sokol92, Владимир, ну что вы все о своем, о программировании. Скорее всего это просто хранитель экрана, а задача запускается в фоне из планировщика, когда пользователь "спит".
По вопросам из тем форума, личку не читаю.
 
sokol92, блокирую - это контрол+альт+делит, а потом иду домой) отчёт обновляется в 7 утра, когда компьютер заблокирован)  
 
Тогда давайте по порядку. Что не так с Application.Ontime? Если просто выключить монитор вместо блокировки, то нормально работает?
Владимир
 
ADimov, Каждая отладка начинается просмотра лога, а его разумеется нет. Предположу, что Outlook в этом режиме выкаблучивается. Сделайте логирование в текстовый файл, и по результату отсеивать можно виновных. А без кода более трудно что сказать.
Изменено: БМВ - 24.07.2019 15:55:02
По вопросам из тем форума, личку не читаю.
 
sokol92, думаю, что при просто выключенном мониторе всёбы сработало гладко, как и работает при включённом. Не могу этого проверить, т.к. Рассылка длится 40 минут, а рабочий комп блокирует экран уже через 10 минут
 
БМВ, никогда не делал логирование и не знаю, как это делается( погуглю и вернусь в тему снова! Спасибо!)  
 
Примерно по 20 секунд на одно сообщение? Что-то многовато.
Логирование, протоколирование. Предусмотреть вывод игформации о том что мделано или запущено с нужной детализацией в файл, в системный лог событий. Можно даже в базу или логсервер, но для вашего случая отладки просто debug.print подойдет, только не закрывать приложение и посмотреть  что там накидало. Я ведь правильно понимаю, что планировщик запускает задачу из под вашего аккаунта и можно в интерактивном режиме запускать.
Изменено: БМВ - 24.07.2019 18:48:03
По вопросам из тем форума, личку не читаю.
 
C логами Игорь тут уже красоту навел.
Владимир
 
sokol92,  Владимир, это для постоянного ведения. Я , черт ну ведь и не программист, еще вводил константу DebugLevel и в случае надобности писал более подробно в зависимости от значения. В данном случае, конкретно для отладки этого случая достаточно будет Debug.Print. Посмотреть дошло ли до 21го сообщения или виноват Outlook хватит. А там и более детально с виновным можно разбираться.
По вопросам из тем форума, личку не читаю.
 
Михаил, я у Вас не подсматривал, но у нас точно так же есть уровень отладки практически с тем же именем (перечисляемый тип c_nodebug, c_fatal, c_error, c_warn, c_info, c_debug, c_debug2).  :)  
Изменено: sokol92 - 24.07.2019 19:47:40
Владимир
 
БМВ, да, задача на открытие документа запускается через планировщик задач из под моего аккаунта. А что значит "запускать в интерактивной режиме"?  
 
БМВ, да, около 20 секунд в среднем уходит на фильтрацию файла, копирование отфильтрованных данных в новую книгу, её сохранение, закрытие и отправку. Но при этом первые два десятка сообщений отправляются за минуту-полторы. После этого скорость снижается: в конце рассылки может отправляться от одного до трёх сообщений в минуту, а может и вообще ни одного за минуту не отправиться. Т. к. цикл формирования всех сообщений одинаков, я связываю задержку в отправке с Outlook'ом
 
sokol92, спасибо за ссылку! Сейчас посмотрю)  
 
Цитата
ADimov написал:
интерактивной режиме
Понятие «интерактивный» означает «содержащий элемент взаимодействия с пользователем, зрителем или читателем»

когда есть видимый интерфейс, бывает что можно воздействовать и управлять процессом , а не фоновая задача.
По вопросам из тем форума, личку не читаю.
 
Коллеги, добрый вечер!

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

Длинно получилось, но надеюсь, что кому-то поможет) ещё раз спасибо всем за помощь!) кстати, наверно, нужно бы изменить название темы в соответствии с новыми вводными - сложно придумать что-то говорящее, но подумаю над этим...
Изменено: ADimov - 03.10.2019 23:58:10
 
не блокируйте экран и пользуйтесь своим макросом на здоровье
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, компьютер рабочий и на нём настроена автоматическая блокировка экрана через 10 минут бездействия - это никак не изменить) к тому же, поначалу, наверно, так совпало, что макрос работал только при разблокированном экране, но потом, в процессе его использования, Excel вылетал (но не всегда) уже независимо от блокировки экрана
 
Цитата
ADimov написал:
блокировка экрана через 10 минут бездействия - это никак не изменить
в вашей связке Вы и компьютер кто главный Вы или компьютер?
кто из Вас работу кого настраивает?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, ну, так-то я, но только в рамках предоставленных мне прав. К примеру, параметры блокировки экрана я со своей учётки изменить не могу
 
Пару лет назад или здесь, или на excelworld обсуждался код, препятствующий включению блокировки. Поищите.
 
Цитата
RAN написал:
Пару лет назад или здесь, или на excelworld обсуждался код, препятствующий включению блокировки.
Пару лет назад или здесь, или на excelworld обсуждался ВРЕДНЫЙ код, препятствующий включению блокировки. Вся суть блокировки в том, чтоб заблокировать и экран и ввод, при длительном бездействии, которое расценивается, как отсутствие авторизованного пользователя за ПК. а собственно делать то не особенно сложно, просто прописать временно ключи реестра включающие экранный хранитель и в случае доменного ПК и применения политик, периодически проводить операцию, если процесс ооочень длительный. Но как админ- я против такого.

Да и  судя по всему не в этом дело
Цитата
ADimov написал:
к тому же, поначалу, наверно, так совпало, что макрос работал только при разблокированном экране, но потом, в процессе его использования, Excel вылетал (но не всегда) уже независимо от блокировки экрана
По вопросам из тем форума, личку не читаю.
 
RAN, спасибо! Но, как и сказал Михаил, оказалось что дело не в блокировке экрана. Кстати, после вот этого разбиения макроса на 2 части, которые поочерёдно запускаются vbs, а между запусками убивается Excel, нарезка стала происходить значительно быстрее. 120 файлов за 2 минуты, а до этого было 10минут (это после некоторой оптимизации первого 40минутного кода))) + две минуты на обновление + минута на рассылку. Итого всего 5 минут, вместо первоначальных 40ка)
 
У меня есть такое предположение, что при обновлении табулярной модели, а потом локальной модели данных Excel что-то кэширует и потом это может помешать нормально работе кода, как это было у меня. Поэтому теперь при написании макросов возьму за правило после обновления данных вырубать Excel, снова запускать и продолжать выполнение кода с места остановки

Предлагаю новое название темы: Excel вылетает при запуске макроса после обновления модели данных
Изменено: ADimov - 04.10.2019 17:47:58 (Добавил тему)
 
И у меня еесть предложение: если мысль догнала и ответов после последнего Вашего сообщения нет, вернуться и дополнить его.
Страницы: 1
Наверх