2009-11-19 6 views
10

Nhiệm vụ là áp dụng cảnh cáo cho phông chữ hiện tại trong khu vực văn bản đã chọn. Khó khăn là Outlook không hỗ trợ ghi macro khi đang chạy - nó muốn mã được viết bằng tay.Macro MS Outlook để tấn công văn bản đã chọn

Ví dụ, mã đơn giản sau đây:

Selection.Font.Strikethrough = True 

công trình cho Word, nhưng đưa ra một lỗi cho Outlook:

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

Tôi đang sử dụng MS Outlook 2003. Ý tưởng là áp dụng phông chữ không được xác định trước khối văn bản (ví dụ: "Chữ in đậm" hoặc khớp với một số mẫu trong nội dung thư). có nghĩa là, với chuột). – Andy

+0

chỉ muốn theo dõi để xem câu trả lời của bạn có dưới đây không. –

Trả lời

1

Dưới đây là một vài lưu ý về rối tung xung quanh với các thư đang mở, không có kiểm tra, nó chỉ giả định rằng bạn có một mục thư mở. Nếu bạn muốn nói thêm một chút về những gì bạn muốn làm, và trong phiên bản nào, tôi có thể giúp đỡ nhiều hơn một chút.

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

Ý tưởng là áp dụng phông chữ cho văn bản được chọn thủ công (ví dụ: bằng chuột); và nội dung thư không có bất kỳ thông tin nào về lựa chọn. – Andy

13

Giả định rằng bạn cũng đã cài đặt Word trên hộp của mình. Nếu vậy, bạn có thể truy cập hầu hết từ OM từ Outlook VBE mà không tham chiếu đến Word bằng cách sử dụng đối tượng ActiveInspector 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 và nếu bạn không có Word hoặc nếu Outlook được thiết lập để sử dụng HTML thay thế, thì bạn có thể truy cập nó thông qua 'ActiveInspector.HTMLEditor'. – Aaronaught

1

Bạn cần truy cập HTMLEditor hoặc WordEditor của Trình kiểm tra. Kiểm tra tệp trợ giúp để biết mã mẫu. Nếu bạn đang sử dụng WordEditor thì bạn có thể ghi macro trong Word và kết hợp mã kết quả vào macro Outlook bằng cách sử dụng 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