Медленное открытие любого электронного письма после установки значения для объекта в Application_ItemLoad

В основном я использую приведенный ниже код для запуска макроса после того, как вручную открою определенное электронное письмо.
Код и макрос работают, но я заметил замедление при открытии любого письма в Outlook.
После многих тестов я обнаружил, что эта строка является причиной проблемы:

Set MyItem = Item

А это полный код:

Option Explicit
Option Compare Text
Public WithEvents MyItem As Outlook.MailItem

 
Private Sub Application_ItemLoad(ByVal Item As Object)
    If Item.Class = olMail Then
       Set MyItem = Item  'This line cause slow opening of any email
    End If
End Sub
 
Private Sub myItem_Open(Cancel As Boolean)
      If MyItem.Subject = "Test Email" Then
      'Code
      End If
End Sub

Пожалуйста, как решить эту проблему?

Похоже, что назначение этого кода каждому загружаемому электронному письму оказывает такое влияние, что замедляет открытие. Вероятно, мало что может сделать против этого.

Pᴇʜ 03.05.2022 10:14

@Pᴇʜ, я пытался переместить весь код из Sub Application_ItemLoad в myItem_Open, но последний макрос не сработал, без каких-либо ошибок.

Waleed 03.05.2022 10:18

Какова ваша цель обработки события ItemLoad?

Eugene Astafiev 03.05.2022 12:27
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
30
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Basically I am using below code to run macro after I manually open a specific email.

Вы можете рассмотреть возможность использования других обработчиков событий в Outlook — для выбора в окне Explorer вы можете попытаться обработать событие SelectionChange класса Explorer, которое запускается, когда пользователь выбирает другой или дополнительный элемент Microsoft Outlook программно или путем взаимодействия с пользовательским интерфейсом. . Для открытия в отдельном окне вы можете обработать событие новый инспектор, которое запускается всякий раз, когда открывается новое окно инспектора, либо в результате действий пользователя, либо через программный код. Событие происходит после создания нового объекта Inspector, но до появления окна инспектора. Также вы можете обработать событие Инспектор.Активировать, которое срабатывает, когда инспектор становится активным окном, либо в результате действия пользователя, либо через программный код.

Если есть конкретная причина для использования обработчика событий ItemLoad в коде, вы можете продолжить использовать технологию позднего связывания и сохранить элемент, определенный как объект.

Также не забудьте освободить соответствующие объекты в событии Unload событий Item-уровня.

Этот ответ datanumen.com/blogs/… похож на ваш код, но понятнее. На самом деле, это исправило многие мои проблемы, и я опубликую его (после адаптации) в качестве своего ответа.

Waleed 03.05.2022 14:31

Ответ был дан без кода, поэтому я не понимаю, что там может быть понятнее. Пожалуйста, не забудьте отметить ответ.

Eugene Astafiev 03.05.2022 14:39

Кроме того, мне пришлось использовать Set oInspector = Nothing в конце oInspector_Activate, иначе мой последний макрос будет работать в бесконечном цикле. И, пожалуйста, считайте меня новичком в программировании Outlook.

Waleed 03.05.2022 16:57

Другие вопросы по теме