Макрос MS Outlook для вычеркивания выделенного текста - PullRequest
10 голосов
/ 19 ноября 2009

Задача состоит в том, чтобы применить вычеркивание к текущему шрифту в выделенной текстовой области. Сложность в том, что Outlook не поддерживает запись макросов на лету - он хочет, чтобы код был написан от руки.

Например, следующий простой код:

Selection.Font.Strikethrough = True

работает для Word, но выдает ошибку для Outlook:

Run-time error '424':
Object required

Ответы [ 3 ]

13 голосов
/ 31 декабря 2009

Предполагается, что на вашем устройстве также установлен Word. Если это так, вы можете получить доступ к большей части Word OM из Outlook VBE, не ссылаясь на Word, используя объект ActiveInspector.WordEditor .

Sub StrikeThroughinMailItem()
    Dim objOL As Application
    Dim objDoc As Object
    Dim objSel As Object
    Set objOL = Application
    Set objDoc = objOL.ActiveInspector.WordEditor
    Set objSel = objDoc.Windows(1).Selection
    objSel.Font.Strikethrough = True
End Sub
1 голос
/ 02 марта 2010

Вам необходимо получить доступ к HTMLEditor или WordEditor инспектора. Проверьте файл справки для примера кода. Если вы используете WordEditor, вы можете записать макрос в Word и включить полученный код в макрос Outlook с помощью WordEditor.

Public Sub DoIt()
    'must set word as mail editor
    'must set reference to word object library

    Dim oInspector As Outlook.Inspector
    Dim oDoc As Word.Document
    Dim oItem  As Outlook.MailItem

    Set oItem = Outlook.Application.CreateItem(olMailItem)
    oItem.BodyFormat = olFormatRichText 'must set, unless default is rich text

    Set oInspector = oItem.GetInspector
    oInspector.Display 'must display in order for selection to work

    Set oDoc = oInspector.WordEditor

    'better to use word document instead of selection
    'this sample uses selection because word's macro recording using the selection object

    Dim oSelection As Word.Selection
    Set oSelection = oDoc.Application.Selection

    oSelection.TypeText Text:="The task is to apply strikethroughout."
    oSelection.MoveLeft Unit:=wdCharacter, Count:=4
    oSelection.MoveLeft Unit:=wdCharacter, Count:=7, Extend:=wdExtend

    oSelection.Font.Strikethrough = True

End Sub
1 голос
/ 19 ноября 2009

Вот несколько заметок о том, как возиться с открытым сообщением, проверок нет, просто предполагается, что у вас есть открытый почтовый элемент. Если вы хотели бы рассказать немного больше о том, что вы хотите сделать, и в какой версии, я смогу помочь немного больше.

Dim ActiveMessage As MailItem
Dim strHTML As String

Set ActiveMessage = ActiveInspector.CurrentItem
Debug.Print ActiveMessage.Body
Debug.Print ActiveMessage.HTMLBody

strHTML = Replace(ActiveMessage.Body, "This sentence is bold", _
    "<STRONG>This sentence is bold</STRONG>")

ActiveMessage.HTMLBody = strHTML

Debug.Print ActiveMessage.HTMLBody
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...