Outlook vba находит свойства элемента, из которого исходит ответ

У меня есть определенные пользователем свойства в моих электронных письмах. Я хотел бы, чтобы они были скопированы в случае ответа на новый элемент (с того, откуда был отправлен ответ).

Это не было бы проблемой, но с приведенным ниже кодом, скопированным из https://docs.microsoft.com/de-de/office/vba/api/outlook.mailitem.reply%28even%29 Я получаю сообщение "Ошибка VBA 91: переменная объекта не установлена " при запуске Initialize_Handler

Public WithEvents myItem As MailItem 

Sub Initialize_Handler() 
  Set myItem = Application.ActiveInspector.CurrentItem 
End Sub 

Private Sub myItem_Reply(ByVal Response As Object, Cancel As Boolean) 
  ...code for copying user-defined properties...
End Sub

Что вызывает эту ошибку? Это происходит даже в том случае, если «ThisOutlookSession» содержит только этот код.

И я ищу правильный путь для получения значений/свойств из исходного элемента электронной почты?

Спасибо! Максимум


person Max    schedule 28.04.2020    source источник
comment
не совсем. Теперь я выяснил, что вызывает проблему: если я открою почту как окно/инспектор самостоятельно, сработает ответная подпрограмма. Когда я нажимаю «Ответить» в самом Outlook (главное окно), ответ-подсказка не срабатывает. Как я могу этого добиться?   -  person Max    schedule 29.04.2020
comment
тем временем я вижу, что есть еще одна проблема / вопрос .... извините ... даже когда срабатывает answer.sub, я не могу получить доступ к старому электронному письму, на которое идет ответ, для чтения его свойств   -  person Max    schedule 29.04.2020


Ответы (2)


Кажется, что окно инспектора не открыто во время выполнения следующего кода:

Sub Initialize_Handler() 
  Set myItem = Application.ActiveInspector.CurrentItem 
End Sub 

В этом случае ActiveInspector ничего не возвращает. Подробнее об ошибке вы можете узнать на странице Переменная объекта не установлена ​​(ошибка 91) article.

person Eugene Astafiev    schedule 29.04.2020
comment
насколько я знаю, окно инспектора будет открываться по электронной почте как окно, а не в режиме предварительного просмотра. Приведенный выше код запускается при запуске Outlook, как тогда может быть открыто электронное письмо? - person Max; 29.04.2020

на другой странице я нашел решение, которое работает. Вот полный (адаптированный) код:

Option Explicit
Public WithEvents objInspectors As Outlook.Inspectors
Public WithEvents objExplorer As Outlook.Explorer
Public WithEvents olitem As Outlook.mailitem

Private Sub Application_Startup()
 Dim myRecipient As Outlook.Recipient
 Dim folder As Outlook.MAPIFolder

 Set objInspectors = Outlook.Inspectors
 Set objExplorer = Outlook.Application.ActiveExplorer
End Sub
Private Sub objInspectors_NewInspector(ByVal Inspector As Inspector)
    Dim olitem As Object
    Set olitem = Inspector.CurrentItem
    If TypeName(olitem) = "MailItem" Then Set olitem = olitem
End Sub

Private Sub olitem_Forward(ByVal Forward As Object, Cancel As Boolean)
 Call kennzeichn_auto(olitem, Forward)
End Sub
Private Sub olitem_Reply(ByVal response As Object, Cancel As Boolean)
 Call kennzeichn_auto(olitem, response)
End Sub
Private Sub olitem_ReplyAll(ByVal response As Object, Cancel As Boolean)
 Call kennzeichn_auto(olitem, response)
End Sub
Sub kennzeichn_auto(olitem As mailitem, response As mailitem)
 Call AddUserProperty(response, "Kunde", wert_property(olitem, "Kunde"))
 Call AddUserProperty(response, "Bearbeiter", wert_property(olitem, "Bearbeiter"))
 Call AddUserProperty(response, "KundeNo", wert_property(olitem, "KundeNo"))
End Sub
person Max    schedule 29.04.2020