Макрос Excel зависает в Outlook

У меня есть этот довольно тяжелый макрос Excel. При запуске Outlook зависает.

Я знаю, что он не использует всю мощность ЦП, потому что
а) у меня мощный многоядерный компьютер
б) все мои другие программы (даже ресурсоемкие) работают нормально.

Похоже, что Outlook и Excel совместно используют процесс, который Excel перехватывает.

Мой макрос не делает ничего, связанного с Outlook, по крайней мере, сознательно. Он извлекает данные из Bloomberg и выполняет некоторые расчеты.


person RAY    schedule 06.08.2015    source источник
comment
Позвольте мне добавить, что я использую плагин Bloomberg, а также xlwings, поэтому, если есть известные проблемы с этими двумя надстройками/библиотеками, то это тоже может быть причиной. Так кто-нибудь знает?   -  person RAY    schedule 10.08.2015


Ответы (4)


Я ценю, что лошадь очень сильно покинула загон ... однако я тоже испытал это и без ссылок в моем коде на модель Outlook. Я также заметил, что мой Excel блокируется, пока выполняются макросы в другом экземпляре Excel.

Чтобы решить эту проблему, вам нужно добавить

DOEVENTS

строка вашего кода, чтобы процитировать сайт MSDN

DoEvents передает управление операционной системе. Управление возвращается после того, как операционная система завершила обработку событий в своей очереди.

Куда поместить строку DOEVENTS, во многом зависит от вашего кода, но в моем довольно тяжелом макросе, где я делаю несколько вызовов SQL, я помещал ее непосредственно перед каждым вызовом SQL, который работает хорошо. Это позволяет мне вполне успешно работать в одном экземпляре Excel, в то время как фоновый экземпляр выполняет несколько выборок SQL.

person David Ackroyd    schedule 07.06.2017

То же самое произошло со мной при переносе моих макросов в Office 2016. Решение: снимите флажок с библиотеки «Библиотека объектов Microsoft Office 16.0», которая включается по умолчанию при создании нового модуля vba.

person Lyon    schedule 24.04.2018

Имейте в виду, что все вызовы объектной модели Outlook направляются в основной поток Outlook, поэтому, если ваш макрос Excel использует объектную модель Outlook, Outlook может и перестанет отвечать на запросы.

Расширенный MAPI (C++ или Delphi) можно использовать в многопоточной среде.

Что делает ваш макрос? Пожалуйста, опубликуйте соответствующий фрагмент кода.

person Dmitry Streblechenko    schedule 06.08.2015
comment
Я добавил уточнение к своему вопросу о том, что мой макрос, насколько мне известно, вообще не касается Outlook. - person RAY; 06.08.2015

У меня такая же проблема. Я избегаю блокировки других книг Excel, когда запускаю код в книге, открывая их в новых экземплярах. Обратите внимание, что по умолчанию Excel теперь открывает все книги в одном экземпляре. Для книг, в которых у меня есть VBA, и для больших книг — я всегда стараюсь открывать в новом экземпляре, чтобы избежать зависания и путаницы в отношении того, где должен работать VBA. Я делаю это, удерживая клавишу ALT при открытии Excel (если другой экземпляр уже открыт) и подтверждаю, что хочу открыть новый экземпляр. Это работает и для других приложений.

Однако я не знаю, как сказать Outlook открывать в новом экземпляре, поскольку это единственный запущенный экземпляр Outlook. Иногда Outlook зависает, когда я запускаю код в Excel, а иногда нет (запуск одного и того же кода). Мне повезло закрыть Outlook и снова открыть его, чтобы «отсоединить» его от моего экземпляра Excel, в котором я хочу запускать длительные макросы.

person diane gerencser    schedule 27.05.2020
comment
это не помогает решить проблему - person NIMISHAN; 27.05.2020
comment
Я могу только сообщить, что это, кажется, работает для моей проблемы с зависанием Outlook, когда я запускаю Excel VBA (который работает долго). Только сегодня у меня было открыто три экземпляра Excel и Outlook. Я запустил некоторый код в одном из своих экземпляров Excel (выполнение занимает более 10 минут). Я зашел в Outlook, и он был заблокирован. Затем я пошел в свой диспетчер задач и убил процесс Outlook. После повторного открытия Outlook (макрос Excel все еще работает) я смог использовать Outlook. - person diane gerencser; 29.05.2020