我想通过Outlook发送一封附有工作簿的电子邮件。
";致";以及";CC";字段未填充,导致电子邮件未发送。
";致";以及";Cc";每次使用Excel工作簿时,字段都会更改,因此需要使用H16和H19中的数据来填充电子邮件的收件人。
Dim OutApp As Object
Dim OutMail As Object
Dim strbody As String
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
strbody = "<Font Size=2 Font Face=Verdana> Hi,<br><br>" & _
"Please review and approve.<br>"
On Error Resume Next
With OutMail
.Display
.To = ActiveSheet.Range("H16")
.CC = ActiveSheet.Range("H9")
.BCC = ""
.Subject = "[APPROVAL REQUIRED]"
.HTMLBody = strbody & "<br>" & .HTMLBody
.Recipients.ResolveAll
.Attachments.Add Application.ActiveWorkbook.FullName
.Send
End With
On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing
没有On Error Resume Next
,我得到:
运行时错误'-2147417851(80010105(':对象'_MailItem'的方法'To'失败
您现在明白为什么了:
On Error Resume Next
: : : :
On Error GoTo 0
从来没有这样使用过。这样使用它可以隐藏所有错误,所以只有喜欢神秘失败的人才会使用。如果你愿意的话,我会添加一个部分来解释On Error Resume Next
应该如何使用。
"运行时错误"-2147417851(80010105(":对象"_MailItem"的方法"To"失败;不是错误消息中最有用的。您所知道的关于ActiveSheet.Range("H16")
的某些信息与.To
不兼容。
我想补充一下:
Debug.Print ActiveSheet.Name
ActiveSheet
是你想要的吗?ActiveSheet
是一个需要避免的属性,除非每次运行宏时确实需要不同的活动工作表。Worksheets("Email Data")
更安全,对未来的维护程序员有帮助。
如果是正确的工作表,ActiveSheet.Range("H16")
的值是多少?它是一个字符串还是可以自动转换为字符串的东西?尝试:
Dim StrTemp As String
StrTemp = ActiveSheet.Range("H16").Value
Debug.Print StrTemp
.To = StrTemp
如果这没有暴露出问题,我会感到惊讶。如果您需要进一步的帮助,请报告发生了什么。