簡體   English   中英

簽名失敗的 VBA 展望

[英]VBA to outlook with signature failure

最近我一直在嘗試自動化一些直接從 excel 發送的電子郵件。 我使用下面的 VBA。 它曾經完美運行,附上兩個附件並包含帶有我的 Outlook 標准簽名的文本。 但是,最近我再次使用了該宏,但它無法工作,給我以下錯誤:應用程序定義或對象定義錯誤(在 .HTMLBODY 行)。 當我刪除最后一個 .HTMLBody 時,它可以工作,但它排除了我的簽名。 有誰知道如何解決這個問題,或者我是否忽略了某些東西?

謝謝!

Sub BodyVsHTMLBody()

Dim ol As Outlook.Application
Dim olMail As Outlook.MailItem

Set ol = New Outlook.Application
Set olMail = ol.CreateItem(olMailItem)

With olMail
.To = Sheet3.Range("C7").Value
.CC = Sheet3.Range("C8").Value
.Subject = Sheet3.Range("C9").Value
.Attachments.Add Sheet3.Range("C11").Value
.Attachments.Add Sheet3.Range("C12").Value
.Display
.HTMLBody = RangetoHTML(Sheet3.Range("C18")) & .HTMLBody

End With
 
End Sub

Function RangetoHTML(rng As Range)

Dim fso As Object
Dim ts As Object
Dim TempFile As String
Dim TempWB As Workbook

TempFile = Environ$("temp") & "\" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"


Set TempWB = Workbooks.Add(1)
With TempWB.Sheets(1)
    .Cells(1).PasteSpecial Paste:=8
    .Cells(1).PasteSpecial xlPasteValues, , False, False
    .Cells(1).PasteSpecial xlPasteFormats, , False, False
    .Cells(1).Select
    Application.CutCopyMode = False
    On Error Resume Next
    .DrawingObjects.Visible = True
    .DrawingObjects.Delete
    On Error GoTo 0
End With

With TempWB.PublishObjects.Add( _
     SourceType:=xlSourceRange, _
     Filename:=TempFile, _
     Sheet:=TempWB.Sheets(1).Name, _
     Source:=TempWB.Sheets(1).UsedRange.Address, _
     HtmlType:=xlHtmlStatic)
    .Publish (True)
End With

Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
RangetoHTML = ts.readall
ts.Close
RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
                      "align=left x:publishsource=")


TempWB.Close savechanges:=False


Kill TempFile

Set ts = Nothing
Set fso = Nothing
Set TempWB = Nothing
End Function

以下代碼行似乎在運行時引發錯誤:

.HTMLBody = RangetoHTML(Sheet3.Range("C18")) & .HTMLBody

首先,您需要記住HTMLBody是代表消息正文的 HTML 文檔。 雖然 Outlook 在處理格式不正確的 HTML 標記時可能會糾正錯誤,但為了使文檔保持一致的狀態,我建議在打開<body>和關閉</body>標記之前添加額外的位。 因此,您的 HTML 文檔格式正確,不會導致郵件正文出現故障。

有問題的代碼行包含一個返回一些結果的函數調用。 要找出它到底返回了什么,我建議在單獨的代碼行上聲明一個調用:

Dim tempReturn as String = RangetoHTML(Sheet3.Range("C18"))

在詢問代碼中的 HTMLBody 屬性之前,沒有時間初始化檢查器。 因此,我建議先調用Display方法,然后添加附件,這樣檢查器窗口將被初始化,您可以獲得 HTMLBody 屬性。

最后一點是處理 Outlook 對象模型時的安全觸發器。 嘗試在不需要在代碼中創建新Application實例的 Outlook VBA 環境中使用相同的代碼。 如果問題不可重現並且代碼工作正常,就是這樣!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM