自动保存来自 Outlook 365 的附件
Auto Save attachment from Outlook 365
我尝试使用内置 Outlook 规则来实现我的目标,但没有成功,所以我决定使用 VBA 脚本,但它也不能正常工作。
场景:
每隔 1 小时我就会收到一封包含 xls 格式报告的电子邮件,需要将其保存在共享文件夹中。每 1 小时的报告都可以被新报告覆盖。我不需要文件名中的任何日期和时间,只保存收到的文件。
我在收件箱中有专门的子文件夹,其中包含主题字符串“销售报告”的所有电子邮件都必须移动。我尝试创建规则 - 当电子邮件被接收时,然后将其移动到子文件夹,然后 运行 VBA 允许保存附件的脚本。然而,它有时不工作,而不是保存 xls 文件,脚本正在保存文件“ATP 扫描正在进行”。看起来脚本在文件被内置 Outlook 扫描仪扫描之前正在保存 xls 文件。
有什么方法可以延迟保存 xls 直到扫描完成,或者有任何其他方法可以实现我的目标。
感谢支持
Public Sub SaveAttachmentsToDisk(MItem As Outlook.MailItem)
Dim oAttachment As Outlook.Attachment
Dim sSaveFolder As String
sSaveFolder = "\reports\jon\"
For Each oAttachment In MItem.Attachments
oAttachment.SaveAsFile sSaveFolder & oAttachment.DisplayName
Next
End Sub
像这样的东西应该有用...
In ThisOutlookSession
Private WithEvents ReportItems As Outlook.Items
Private Sub Application_Startup()
On Error Resume Next
With Outlook.Application
Set ReportItems = .GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Folders("Sales Reports").Items
End With
End Sub
Private Sub ReportItems_ItemAdd(ByVal Item As Object)
On Error Resume Next
If TypeName(Item) = "MailItem" Then Call SaveXLSAttachments(Item, "\reports\jon\")
End Sub
In a module
Sub SaveXLSAttachments(ByVal Item As Object, FilePath As String)
Dim i As Long, FileName As String, Extension As String
If Right(FilePath, 1) <> "\" Then FilePath = FilePath & "\"
Delay(5) 'If required
Extension = ".xls"
With Item.Attachments
If .Count > 0 Then
For i = 1 To .Count
FileName = FilePath & .Item(i).FileName
If LCase(Right(FileName, Len(Extension))) = Extension Then .Item(i).SaveAsFile FileName
Next i
End If
End With
End Sub
Function Delay(Seconds As Single)
Dim StopTime As Double: StopTime = Timer + Seconds
Do While Timer < StopTime
DoEvents
Loop
End Function
我尝试使用内置 Outlook 规则来实现我的目标,但没有成功,所以我决定使用 VBA 脚本,但它也不能正常工作。
场景: 每隔 1 小时我就会收到一封包含 xls 格式报告的电子邮件,需要将其保存在共享文件夹中。每 1 小时的报告都可以被新报告覆盖。我不需要文件名中的任何日期和时间,只保存收到的文件。
我在收件箱中有专门的子文件夹,其中包含主题字符串“销售报告”的所有电子邮件都必须移动。我尝试创建规则 - 当电子邮件被接收时,然后将其移动到子文件夹,然后 运行 VBA 允许保存附件的脚本。然而,它有时不工作,而不是保存 xls 文件,脚本正在保存文件“ATP 扫描正在进行”。看起来脚本在文件被内置 Outlook 扫描仪扫描之前正在保存 xls 文件。
有什么方法可以延迟保存 xls 直到扫描完成,或者有任何其他方法可以实现我的目标。
感谢支持
Public Sub SaveAttachmentsToDisk(MItem As Outlook.MailItem)
Dim oAttachment As Outlook.Attachment
Dim sSaveFolder As String
sSaveFolder = "\reports\jon\"
For Each oAttachment In MItem.Attachments
oAttachment.SaveAsFile sSaveFolder & oAttachment.DisplayName
Next
End Sub
像这样的东西应该有用...
In ThisOutlookSession
Private WithEvents ReportItems As Outlook.Items
Private Sub Application_Startup()
On Error Resume Next
With Outlook.Application
Set ReportItems = .GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Folders("Sales Reports").Items
End With
End Sub
Private Sub ReportItems_ItemAdd(ByVal Item As Object)
On Error Resume Next
If TypeName(Item) = "MailItem" Then Call SaveXLSAttachments(Item, "\reports\jon\")
End Sub
In a module
Sub SaveXLSAttachments(ByVal Item As Object, FilePath As String)
Dim i As Long, FileName As String, Extension As String
If Right(FilePath, 1) <> "\" Then FilePath = FilePath & "\"
Delay(5) 'If required
Extension = ".xls"
With Item.Attachments
If .Count > 0 Then
For i = 1 To .Count
FileName = FilePath & .Item(i).FileName
If LCase(Right(FileName, Len(Extension))) = Extension Then .Item(i).SaveAsFile FileName
Next i
End If
End With
End Sub
Function Delay(Seconds As Single)
Dim StopTime As Double: StopTime = Timer + Seconds
Do While Timer < StopTime
DoEvents
Loop
End Function