【发布时间】:2021-08-10 14:09:47
【问题描述】:
我们的订单系统将发票输出为草稿电子邮件。每张发票会创建一封电子邮件,但通常这是发送给同一客户的多封电子邮件。
为了方便我们的客户,我们将这些信息合并为每位客户一封电子邮件,并附上多张发票。
问题:
当我打开各种电子邮件时,我可以手动将附件从一个草稿拖到另一个草稿。
如何将附件从一封草稿电子邮件拖到另一封电子邮件上?
我尝试使用附件对象数组(根据我未解决的问题 here),但这似乎不可能。
Sub AmalgInv()
Dim MyAccount As Account
'section here to set the MyAccount variable, not relevant to this question.
Dim OpenItem As Object
Dim arrDraft() As MailItem
For a = Application.Inspectors.Count To 1 Step -1
Set OpenItem = Application.Inspectors(a).CurrentItem
If TypeOf OpenItem Is MailItem Then
If OpenItem.Subject Like "*New*Invoice*" Then
b = b + 1
ReDim Preserve arrDraft(1 To b)
Set arrDraft(b) = OpenItem
End If
End If
Next
'ArrDraft now only contains relevant (invoice) drafts not anything else
Dim arrUnqAdd() As String 'array of unique addresses
Dim strAddrUnique As String 'list of unique email addresses
Dim strAddrNonUnique As String 'list of duplicated email addresses
ReDim Preserve arrAdd(1 To UBound(arrDraft))
For a = 1 To UBound(arrDraft)
If Not strAddrUnique Like "*" & arrDraft(a).To & "*" Then
strAddrUnique = strAddrUnique & IIf(Len(strAddrUnique) = 0, "", "/") & arrDraft(a).To
Else
strAddrNonUnique = strAddrNonUnique & IIf(Len(strAddrNonUnique) = 0, "", " / ") & arrDraft(a).To
End If
Next
arrUnqAdd = Split(strAddrUnique, "/")
'One option I considered involved creating a similar array of non-unique email addresses
'Hence adding slashes into strAddrNonUnique as well
Dim NewMail As MailItem
For a = LBound(arrUnqAdd) To UBound(arrUnqAdd())
If Not strAddrNonUnique Like "*" & arrUnqAdd(a) & "*" Then
'Only one email for this customer/address
For b = LBound(arrDraft) To UBound(arrDraft)
If arrDraft(b).To = arrUnqAdd(a) Then
Set arrDraft(b).SendUsingAccount = MyAccount
arrDraft(b).Send
Exit For
End If
Next
Else
'Multiple emails for this address.
'This is the bit I need advice on.
'Tried creating a new email for each and then deleting the leftover ones;
Set NewMail = Application.CreateItem(olMailItem)
NewMail.To = arrUnqAdd(a)
For b = LBound(arrDraft) To UBound(arrDraft)
If arrDraft(b).To = arrUnqAdd(a) Then
'transfer that email's attachments across to 'NewMail'
'close and delete arrDraft(b) - not coded in because the above isn't working yet.
End If
Next
Set NewMail.SendUsingAccount = MyAccount
NewMail.Display
'NewMail.Send
Next
End Sub
【问题讨论】:
-
这似乎与链接的问题相同,但更令人困惑。
-
@niton 它具有相同的最终目标,但更不受限制(即我已经放弃了整个附件数组的想法,并对任何其他可行的建议持开放态度) .
标签: vba outlook email-attachments