【发布时间】:2016-03-20 05:04:11
【问题描述】:
我们有一个 Excel 电子表格,用于为潜在客户创建报价单。通过使用 VBA,它生成 PDF 并使用 Outlook 将它们通过电子邮件发送给客户。它从用户填写客户详细信息的主工作表上的单元格中获取客户的电子邮件地址。
几周前,它停止在 Outlook 的“收件人”字段中填写客户的电子邮件地址,尽管它已在主表格中填写。
当我们更改此电子表格上的任何内容(包括代码)时,我们会将其保存为新的“修订版”(保留所有以前的修订版)。回顾以前的修订版,我现在发现它们都不起作用。这很奇怪,因为他们以前肯定做过。我正在使用 Office 2016(虽然我前一段时间升级了,但这个问题是最近才出现的。)运行 Office 2013 的机器也无法正常工作。但是,运行 Office 2007 的机器可以工作。
关于为什么现在这是一个问题以及为什么它只是某些版本的 Office 的问题的任何想法?这是代码的sn-p:
Private Sub send_as_pdf_Click()
On Error GoTo ErrMsg
Dim strPath As String, strFName As String
Dim OutApp As Object, OutMail As Object
strPath = Environ$("temp") & "\"
strFName = Sheets("Quotation").Name & " " & Range("G18") & ".pdf"
Sheets("Quotation").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
strPath & strFName, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
strPath2 = Environ$("temp") & "\"
strFName2 = Sheets("Quotation Offer Letter").Name & " " & Range("G18") & ".pdf"
Sheets("Quotation Offer Letter").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
strPath2 & strFName2, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
strPath3 = Environ$("temp") & "\"
strFName3 = Sheets("Additional Works Required").Name & " " & Range("G18") & ".pdf"
Sheets("Additional Works Required").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
strPath3 & strFName3, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
strbody = "<p style='color:#2C3E50;font-family:Calibri;font-size:11pt;'>Hi " & Range("C9") & ",</p>"
strbody2 = "<p style='color:#2C3E50;font-family:Calibri;font-size:11pt;'>The content of the email goes here.</p>"
On Error Resume Next
With OutMail
.Display
.To = Range("C19")
.CC = ""
.BCC = "first@person.com" & ";" & "second@person.com" & ";" & Range("I6") & ";"
.Subject = "Quotation"
.HTMLBody = strbody & strbody2 & .HTMLBody
.Attachments.Add strPath & strFName
.Attachments.Add strPath2 & strFName2
.Attachments.Add strPath3 & strFName3
.Attachments.Add ("C:\Terms and Conditions of Business of Our Business.pdf")
.Attachments.Add ("C:\Warranty Statement of Our Business.pdf")
End With
Kill strPath & strFName
On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing
Exit Sub
ErrMsg:
MsgBox ("MUST enter Issue Number, Date & Customer Info."), , "Customer Email Error Message"
End Sub
【问题讨论】:
-
所有其他字段都在填充好吗?只是
To字段? -
您可能希望使用您正在使用的工作表引用范围,即
.To = Sheets("NameOfSheet").Range("C19");) -
@ScottHoltzman 是的 - 客户的名字正确填充在电子邮件正文中,第三个密件抄送电子邮件地址正确填充(这取决于创建报价的人。)只是“收件人”字段.
-
@R3uK 不幸的是,这不起作用。但是,如果它是活动的,我认为您不需要参考该表。不管怎样,上面的代码直到最近才正常工作。它目前也适用于其他一些机器。
-
@adamcwhite :确实,它隐含在活动工作表上!尽管如此,通常最好完全引用一个范围。我看不到任何其他可能导致问题的东西...您是否尝试将工作机器和非工作机器之间的数据与
Debug.Print进行比较?