2009-11-19 6 views
10

Задача заключается в применении вычеркиванием к текущему шрифту в выделенной области текста. Трудность заключается в том, что Outlook не поддерживает запись макросов «на лету» - он хочет, чтобы код был написан вручную.MS Outlook макрос для вычеркивания выделенного текста

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

Selection.Font.Strikethrough = True 

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

Run-time error '424': 
Object required 
+0

Я использую MS Outlook 2003. Идея применить шрифт не предопределенного текстового блока (например, «Приговор полужирный», или соответствие какой-то шаблон в теле сообщения), но выбранный вручную текст (я с мышью). – Andy

+0

просто хотел следить за тем, отвечает ли приведенный ниже вопрос на ваш вопрос. –

ответ

1

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

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 
+1

Идея заключается в применении шрифта для текста, выбранного вручную (например, с помощью мыши); и тело сообщения не имеет никакой информации о выборе. – Andy

13

Это предполагает, что на вашем поле также установлено 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 
+2

+1, и если у вас нет Word, или если Outlook настроен на использование HTML вместо этого, вы можете перейти к нему через 'ActiveInspector.HTMLEditor'. – Aaronaught

1

Вам необходимо получить доступ к 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