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

时间:2017-04-26 17:13:06

标签: vba outlook outlook-vba

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

Outlook规则确定电子邮件标题包含来自某人的“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

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

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

1 个答案:

答案 0 :(得分: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) {{ 1}} (NTMR)(4) (file)(5) (for)(6)

现在 (you)(7) 分配给字符串变量

Split(subject line), "space")(3)

Dim FileName As String FileName = Split(Item.subject, " ")(3) 替换为 objAtt.DisplayName

FileName
  

默认情况下,或者当Limit等于-1时,Split函数会在每次出现分隔符字符串时拆分输入字符串,并返回数组中的子字符串
  当Limit参数大于零时,Split函数会在分隔符的第一个 Limit-1 出现处拆分字符串,并返回一个包含结果子字符串的数组。
  例如, Dim FileName As String For Each objAtt In itm.Attachments objAtt.SaveAsFile saveFolder & "\" & _ dateFormat & "\" & _ "Source Files" & "\" & FileName & dateFormat Next
  而 Split("a:b:c", ":") returns the array {"a", "b", "c"}

     

要上个月尝试 DateAdd Function

实施例

Split("a:b:c", ":", 2) returns the array {"a", "b:c"}
  

<子>   在其他环境中值得探索的一些有用日期函数包括 Option Explicit Public Sub Example() Dim PrevMonth As String PrevMonth = Format(DateAdd("m", -1, Date), "yyyymm") Debug.Print PrevMonth End Sub DateDiff DatePart ,日,月,年和 DateSerial 。    IsDate (检查字符串是否为有效日期)对IsDate之类的内容特别有用,您可能希望强制用户在某个特定日期输入有效日期文本框。