首页 文章

将电子邮件中的附件保存到每月更改的文件夹中

提问于
浏览
2

我试图在Outlook中获得一个VBA宏,它将保存电子邮件对特定文件夹的附件(每月更改),并将收到的前一个月的YYYYMM添加到文件名中 .

outlook规则标识电子邮件 Headers 包含来自某人的“NTMR” .

当它这样做时,它会运行脚本,将附件保存在文件夹中 .

因此,当宏识别收到的电子邮件的月份时,它会保存在落后一个月的文件夹中 . 例如:

在DD / 04/17上收到的电子邮件为“这里是您的NTMR文件”,它会将文件保存在201703父文件夹中的文件夹中作为NTMR - 201703

所以文件的路径将是C:\ Users \ alitalh \ Downloads \ Test \ 201703 \ Source Files \ NTMR 201703

我已经提出了follownig宏 - 请告诉我如何解决它?

Public Sub saveAttachtoDisk(itm As Outlook.MailItem)
    Dim objAtt As Outlook.Attachment
    Dim saveFolder As String
    Dim dateFormat As String
    saveFolder = "C:\Users\alitalh\Downloads\Test"
    dateFormat = Format(Now, "yyyymm" - 1, 1)

    For Each objAtt In itm.Attachments
        objAtt.SaveAsFile saveFolder & "\" & dateFormat & "\" & "Source Files" & "\" & objAtt.DisplayName & dateFormat
        Set objAtt = Nothing
    Next
End Sub

如何从 Headers 中删除NTMR并将其放在文件名中?

我有另一个宏在电子邮件之前设置文件夹,所以我们不需要创建另一个文件夹

1 回答

  • 3

    使用 MSDN Split Function

    主题行上的示例 Here is the NTMR file for you 按空格字符 (" ") 拆分

    代码示例

    Sub Example()
        Dim Item As Outlook.mailitem
    
        Set Item = ActiveExplorer.Selection.Item(1)
    
        Debug.Print Item.subject ' Print on Immediate Window (Ctrl+G)
    
        Item.subject = Split(Item.subject, " ")(3)
    
        Debug.Print Item.subject ' Print on Immediate Window (Ctrl+G)
    
    End Sub
    

    你的主题= (Here)(1) (is)(2) (the)(3) (NTMR)(4) (file)(5) (for)(6) (you)(7)

    现在 Split(subject line), "space")(3) 在分配给字符串变量时

    Dim FileName As String
    FileName = Split(Item.subject, " ")(3)
    

    FileName 替换 objAtt.DisplayName


    Dim FileName As String
    For Each objAtt In itm.Attachments
        objAtt.SaveAsFile saveFolder & "\" & _
                           dateFormat & "\" & _
                        "Source Files" & "\" & FileName & dateFormat
    Next
    

    默认情况下,或当Limit等于-1时,Split函数会在每次出现分隔符字符串时拆分输入字符串,并返回数组中的子字符串 . 当Limit参数大于零时,Split函数会在分隔符的第一次Limit-1次出现时拆分字符串,并返回一个包含结果子字符串的数组 . 例如,Split(“a:b:c”,“:”)返回数组{“a”,“b”,“c”},而Split(“a:b:c”,“:”,2 )返回数组{“a”,“b:c”} .

    要上个月试试 DateAdd Function

    Option Explicit
    Public Sub Example()
        Dim PrevMonth As String
    
        PrevMonth = Format(DateAdd("m", -1, Date), "yyyymm")
        Debug.Print PrevMonth
    End Sub
    

    在其他上下文中值得探索的一些有用的日期函数包括DateDiff,DatePart,DateSerial,Day,Month,Year和IsDate . IsDate(检查字符串是否为有效日期)对于UserForms等特别有用,您可能希望强制用户在某个文本框中键入有效日期 .

相关问题