繁体   English   中英

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

[英]Save attachment from an email in to a folder that changes every month

我正在尝试在 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 并将其放入文件名中?

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

使用MSDN 拆分函数

主题行示例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)

objAtt.DisplayName替换为FileName


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", ":") returns the array {"a", "b", "c"}
Split("a:b:c", ":", 2) returns the array {"a", "b:c"}


要获取上个月,请尝试DateAdd 函数

例子

Option Explicit
Public Sub Example()
    Dim PrevMonth As String

    PrevMonth = Format(DateAdd("m", -1, Date), "yyyymm")
    Debug.Print PrevMonth
End Sub

一些值得在其他上下文中探索的有用日期函数包括DateDiffDatePartDateSerial 、 Day 、 Month 、 Year 和IsDate IsDate (检查字符串是否为有效日期)对于UserForms之类的东西特别有用,您可能希望强制用户在特定文本框中键入有效日期。


暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM