Записываемый активный встроенный ответ в Outlook

У меня есть следующий код из какого-то блога, который вставляет HTML из буфера обмена в электронное письмо Outlook.

Sub PrependClipboardHTML()
Dim email As Outlook.MailItem
Dim cBoard As DataObject

Set email = Application.ActiveInspector.CurrentItem
Set cBoard = New DataObject


cBoard.GetFromClipboard
email.HTMLBody = cBoard.GetText + email.HTMLBody

Set cBoard = Nothing
Set email = Nothing

End Sub

Он отлично работает, за исключением того, что электронное письмо находится в собственном окне (т. Е. Выскакивает), иначе оно не сработает.

Я просмотрел документацию и нашел Application.ActiveExplorer.ActiveInlineResponse здесь.

Однако в документации говорится, что он доступен только для чтения, и действительно, он не работает. Есть ли способ получить доступную для записи версию встроенного ответа?


person Prgrm.celeritas    schedule 25.04.2018    source источник


Ответы (3)


Он отлично работает, за исключением того, что электронное письмо находится в собственном окне (т. Е. Выскакивает), иначе оно не сработает.

Это потому, что в коде есть следующий оператор:

Set email = Application.ActiveInspector.CurrentItem

Однако в документации говорится, что он доступен только для чтения, и действительно, он не работает.

Вместо этого попробуйте использовать следующий код:

Set email = Application.ActiveExplorer.ActiveInlineResponse

Свойство ActiveInlineResponse является только для чтения, но не свойства объекта, которые вы собираетесь использовать. Это означает, что вы не можете установить другой почтовый элемент для встроенного ответа, но сможете настроить свойства полученного элемента.

person Eugene Astafiev    schedule 25.04.2018
comment
Спасибо за ваш ответ. Я должен был быть яснее, но я пробовал это с Set email = Application.ActiveExplorer.ActiveInlineResponse, и он ничего не дает. Вот что я имел в виду, это не работает. - person Prgrm.celeritas; 25.04.2018
comment
Вы можете получить значение EntryID и попытаться получить новый экземпляр элемента, вызвав NameSpace.GetItemFromID, где вы можете установить тело. Или просто отобразите его в новом окне инспектора, вызвав метод Display. - person Eugene Astafiev; 25.04.2018
comment
Я ошибался. В моем коде было что-то еще, из-за чего ActiveInlineRespose не работал. Это работает так, как вы и сказали. - person Prgrm.celeritas; 26.04.2018
comment
Отличные новости! Спасибо, что дали мне знать. - person Eugene Astafiev; 26.04.2018

Возможно, вы пытаетесь работать с ActiveExplorer + Selection.Item Method (Outlook)

Пример

Option Explicit
Public Sub Example()    
    Dim email  As Outlook.MailItem
    Set email = Application.ActiveExplorer.Selection.Item(1)
        Debug.Print email.Subject ' print on immediate window    
End Sub

Или работать с обоими открытые и выбранные элементы

Function GetCurrentItem() As Object
    Dim objApp As Outlook.Application

    Set objApp = Application

    On Error Resume Next
    Select Case TypeName(objApp.ActiveWindow)
        Case "Explorer"
            Set GetCurrentItem = objApp.ActiveExplorer.Selection.Item(1)
        Case "Inspector"
            Set GetCurrentItem = objApp.ActiveInspector.CurrentItem
    End Select

    Set objApp = Nothing
End Function
person 0m3r    schedule 25.04.2018

Вы не можете объединить две строки HTML и ожидать возврата действительного HTML. Эти два должны быть объединены.

При этом используйте объектную модель Word для вставки из буфера обмена:

Application.ActiveEXplorer.ActiveInlineResponseWordEditor.Application.Selection.Paste() 
person Dmitry Streblechenko    schedule 25.04.2018
comment
Как объединить две строки HTML? - person Prgrm.celeritas; 25.04.2018
comment
Возьмите все, что находится между тегами <body> и </body> в первой строке HTML, и вставьте сразу после тега <body> во вторую строку HTML. Затем вам нужно будет скопировать стили из заголовков и т. Д. Это непросто. Пусть эту работу сделает кто-нибудь другой - используйте Selection.Paste в объектной модели Word. - person Dmitry Streblechenko; 25.04.2018