我使用了Ron de Bruin的Outlook电子邮件生成器,对.To,.CC,.Subject,.Body字段进行了一些修改。我还包括一些编码,以便将发票文件附加到电子邮件中。
将跳过附件列表中的第一个组。
Sub Create_Email()
'For Tips see: http://www.rondebruin.nl/win/winmail/Outlook/tips.htm
'Don't forget to copy the function RangetoHTML in the module.
'Working in Excel 2000-2016
Dim rng As Range
Dim OutApp As Object
Dim OutMail As Object
Dim StrBody As String
Dim Bundle As Variant, Group As Variant
Bundle = Split(Worksheets("Extra").Range("G2").Value, ",")
StrBody = Range("D5").Value & "<br>" & _
Range("D6").Value & "<br>" & _
Range("D7").Value & "<br>" & _
Range("D8").Value & "<br>" & _
Range("D9").Value & "<br><br><br><br>"
mola = Range("B2").Value
maybe = Format(mola, "mm")
real = Format(mola, "mmmm yyyy")
nope = Format(mola, "yyyy")
InvPath = ("U:\BILLREC\M & R EG Billing\Invoices\" & nope & "\" & maybe & " " & real & "\" & "Electronic Invoices" & "\")
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
On Error Resume Next
With OutMail
.To = Range("C2").Value
.CC = Range("D2").Value
.Subject = Range("C5").Value
.HTMLBody = StrBody
For Each Group In Bundle
pdfFile = "Group" & Group & ".pdf"
.Attachments.Add InvPath & pdfFile
Next Group
For Each Group In Bundle
xlsFile = "Group" & Group & ".xlsx"
.Attachments.Add InvPath & xlsFile
Next Group
.Display
End With
On Error GoTo 0
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
Set OutMail = Nothing
Set OutApp = Nothing
End Sub
&#34;捆绑&#34;数组源自工作簿本身的vlookup,基于组号,采用####,####,##,####格式。
最终,除非文件没有使用我们的标准命名约定命名,否则它会起作用,或者它是列表中的第一个组号。
如果有一个&#34;组&#34;数字,它根本不附加文件。 (我认为这个问题是出于同样的原因 - 它是数组中的第一个项目。)
答案 0 :(得分:0)
非常感谢你/ barrow,他的建议让我看到它在项目计数中真正缺少Bundle(0)。
您可以尝试在GetAttr之后添加快速健全性检查 创建InvPath - GetAttr只返回一些文件属性或 如果文件不存在则抛出错误53。尝试:MsgBox InvPath&amp; &#34;组&#34; &安培;捆绑(0)&amp; &#34; .PDF&#34; &安培; &#34; :&#34; &安培; GetAttr(InvPath&amp;&#34; Group&#34;&amp; 捆绑(0)&amp; &#34; .pdf&#34;)如果这不会引发错误,那么至少我们 可以说文件存在
我的解决方案是将一个额外的分隔符连接到分割的源单元格中。因此,Worksheets("Extra").Range("G2").Value
会返回=CONCATENATE(","," ",VLOOKUP(Interface!A2,Data!A:D,4,FALSE))
而不是VLOOKUP(Interface!A2,Data!A:D,4,FALSE).
的结果。它似乎是伏都教,但它强制拆分以识别Bundle = Split(Worksheets("Extra").Range("G2").Value, ",")
中的第一个分隔符,从而识别第一个项目在集合中。
感谢大家,感谢您的帮助!