excel - 如何根据收到的时间和主题行在新邮件中保存 Excel 附件?
问题描述
我对编码很陌生。我想知道如何使用主题行关键字和收到的时间将特定的 Excel 附件保存在 Outlook 收件箱(“早间电子邮件”)中。
我每天都会收到五封新电子邮件,其中包含要保存到同一个驱动器文件夹中的 Excel 附件。
收到的时间可以是昨晚也可以是今天凌晨。
所有五个文件的名称和接收时间都不同。
收件箱不为空。我不想保存我昨天或两周前保存的东西。
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
“尝试的操作失败;找不到对象”对于 line: Set fol = ns.Folders(1).Folders("Morning Emails")
,即使我已经在 Outlook 收件箱下创建了该子文件夹。
解决方案
设置 ol = 新 Outlook.Application
无需在代码中创建新的 Outlook 应用程序实例。使用该Application
属性在 Outlook VBA 宏中获取宿主应用程序实例。
我建议处理类的NewMailEx
事件Application
。对于 Microsoft Outlook 处理的每个收到的项目,此事件都会触发一次。该项目可以是几种不同的项目类型之一,例如MailItem
、MeetingItem
或SharingItem
。该EntryIDsCollection
字符串包含对应于该项目的条目 ID。
NewMailEx
当新邮件到达收件箱并且在客户端规则处理发生之前触发该事件。您可以使用EntryIDCollection
数组中返回的条目 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
推荐阅读
- python - fromkeys 和 dict 理解有什么区别?
- java - 如何将二维字符串数组的结果除以子数组的长度?
- openstreetmap - 查找 WKT 在澳大利亚的城市
- python - Matplotlib - 如何在给定散点图的真实值和预测值之间绘制垂直线?
- fastify - 使用 OpenAPI 3.0.0 配置 Fastify
- r - 如何解释 which() 输出中的数组索引?
- git - 在 PhpStorm 分支名称前面有一个加号“+”
- angular - Angular:如何在 Angular 中重现黑屏/白屏问题?
- c++ - 在 Visual Studio C++ 上执行时编译错误
- .net - 如何在 AWS Lambda 上加载 .so(共享文件)文件,