【问题标题】:Auto Save attachment from Outlook 365从 Outlook 365 自动保存附件
【发布时间】:2021-03-25 11:34:32
【问题描述】:

我尝试使用内置 Outlook 规则来实现我的目标,但没有成功,因此我决定使用 VBA 脚本,但它也无法正常工作。

场景: 每隔 1 小时,我都会收到带有 xls 格式报告的电子邮件,这些报告需要保存在共享文件夹中。每 1 小时的报告都可以被新的报告覆盖。我不需要文件名中的任何日期和时间,只需保存收到的文件即可。

我在收件箱中有专门的子文件夹,其中包含主题字符串“销售报告”的所有电子邮件都必须移动。我尝试创建规则 - 当电子邮件被接收然后将其移动到子文件夹,然后运行允许保存附件的 VBA 脚本。但是它有时不工作,而不是保存 xls 文件,脚本正在保存文件“ATP Scan In Progress”。看起来脚本在内置 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

【问题讨论】:

    标签: excel vba outlook script


    【解决方案1】:

    这样的事情应该可以工作......

    在此 Outlook 会话中

    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
    

    在一个模块中

    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 规则并仅使用上述两个代码吗?如果电子邮件主题发生变化,我可以在哪里定义新字符串?
    • 我将这两个代码都添加到 Outlook 中,但是当我想选择需要运行的脚本时,我没有任何保存的脚本
    • 只要有新商品放入您的“销售报告”文件夹,代码就会运行。您仍然需要一个规则/过滤器来选择要移动的电子邮件。您可能需要检查文件路径名称是否是保存项目的正确位置
    • 是否可以添加一些代码从销售报告中删除超过 5 天的电子邮件?
    • 是的。通过简短的代码尝试创建一个问题并标记我。我有用于从文件夹中删除过期电子邮件的功能,我可以快速回复
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 2020-10-06
    • 2022-12-14
    • 1970-01-01
    • 2023-02-02
    相关资源
    最近更新 更多