В основном я использую приведенный ниже код для запуска макроса после того, как вручную открою определенное электронное письмо.
Код и макрос работают, но я заметил замедление при открытии любого письма в 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ᴇʜ, я пытался переместить весь код из Sub Application_ItemLoad
в myItem_Open
, но последний макрос не сработал, без каких-либо ошибок.
Какова ваша цель обработки события ItemLoad
?
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/… похож на ваш код, но понятнее. На самом деле, это исправило многие мои проблемы, и я опубликую его (после адаптации) в качестве своего ответа.
Ответ был дан без кода, поэтому я не понимаю, что там может быть понятнее. Пожалуйста, не забудьте отметить ответ.
Кроме того, мне пришлось использовать Set oInspector = Nothing
в конце oInspector_Activate
, иначе мой последний макрос будет работать в бесконечном цикле. И, пожалуйста, считайте меня новичком в программировании Outlook.
Похоже, что назначение этого кода каждому загружаемому электронному письму оказывает такое влияние, что замедляет открытие. Вероятно, мало что может сделать против этого.