我对编码还很陌生。我想知道如何使用主题行关键字和接收的时间将特定的Excel附件保存在Outlook收件箱(“早晨的电子邮件”)中。
我每天会收到五封新电子邮件,其中包含Excel附件以保存到同一驱动器文件夹中。
收到的时间可以是昨晚或今天凌晨。
所有五个文件的名称和接收的时间都不同。
收件箱不为空。我不想保存昨天或2周前保存的内容。
Sub SaveAttachments()
Dim ol As Outlook.Application
Dim ns As Outlook.Namespace
Dim fol As Outlook.Folder
Dim i As Object
Dim mi As Outlook.MailItem
Dim at As Outlook.Attachment
Set ol = New Outlook.Application
Set ns = ol.GetNamespace("MAPI")
Set fol = ns.Folders(1).Folders("Morning Emails")
For Each i In fol.Items
If i.Class = olMail Then
Set mi = i
If mi.Attachments.Count > 0 Then
For Each at In mi.Attachments
at.SaveAsFile "C:\Users\nader\OneDrive\Documents\" & _
at.Filename & Format(mi.ReceivedTime, " MM-DD-YYYY")
Next at
End If
End If
Next i
End Sub
Set fol = ns.Folders(1).Folders("Morning Emails")
行的“尝试操作失败;找不到对象”,即使我已经在Outlook收件箱下创建了该子文件夹。
答案 0 :(得分:1)
设置ol =新Outlook.Application
无需在代码中创建新的Outlook Application实例。使用Application
属性在Outlook VBA宏中获取主机应用程序实例。
我建议处理NewMailEx
类的Application
事件。对于Microsoft Outlook处理的每个收到的项目,将触发一次此事件。该项目可以是几种不同的项目类型之一,例如MailItem
,MeetingItem
或SharingItem
。 EntryIDsCollection
字符串包含与该项目对应的条目ID。
当新消息到达收件箱时以及在发生客户端规则处理之前,将触发NewMailEx
事件。您可以使用EntryIDCollection
数组中返回的Entry ID来调用NameSpace.GetItemFromID方法并处理该项目。
Private Sub outApp_NewMailEx(ByVal EntryIDCollection As String)
Dim itm as Object
Set itm = NS.GetItemFromID(EntryIDCollection)
Debug.Print "mail received"
If itm.Class = olMail Then
Dim it as Outlook.MailItem
Set it = itm
if it.Subject = "your subject" then
If it.Attachments.Count > 0 Then
For Each at In mi.Attachments
at.SaveAsFile "C:\Users\nader\OneDrive\Documents\" & _
at.Filename & Format(mi.ReceivedTime, " MM-DD-YYYY")
Next at
End If
End If
End If
End Sub