繁体   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