2017-04-26 56 views
1

我试图让Outlook中的VBA宏,将电子邮件的附件保存到特定的文件夹(每月改变),并添加前一个月的YYYYMM收到的文件名。保存附件

前景规则标识电子邮件标题中包含“NTMR”从一个人。

而当它这样做,它运行在那里保存的文件夹中安装脚本。

所以当宏识别电子邮件的月收到,重要的是为一个月后面的文件夹中保存。例如:对于DD/04/17接收

电子邮件作为“这是你的NTMR文件”,它会在201703父文件夹保存文件夹中的文件NTMR - 201703

,这样的路径该文件将C:\用户\ alitalh \下载\测试\ 201703 \源文件\ 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并将其放入文件名中?

我的电子邮件之前建立的文件夹另一个宏所以我们并不需要在你的主题行创建另一个文件夹

+0

哪里NTMR?主题行?或电子邮件正文? – 0m3r

+0

@ 0m3r主题行 – wasimakram101

回答

1

工作与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) 

更换objAtt.DisplayNameFileName


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

默认情况下,或者当限制等于-1,Split函数分割在分隔符串的每个匹配的输入字符串,和在一个数组返回
当Limit参数大于零时,Split函数会在首次出现定界符时分割字符串,并返回一个包含结果子串的数组。
例如,Split("a:b:c", ":") returns the array {"a", "b", "c"}
Split("a:b:c", ":", 2) returns the array {"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 

个 值得探讨在其他环境中一些有用的日期功能包括:DateDiffDatePartDateSerial,日,月,年,并IsDateIsDate(它检查字符串是否为有效日期)对于诸如UserForms之类的内容特别有用,您可能希望强制用户在某个文本框中输入有效日期。


+0

非常感谢你..将dateFormat工作罚款在我的代码? – wasimakram101

+0

如何让我的dateFormat在当前月份之前获得一个月? – wasimakram101

+0

@ wasimakram101只是月份和年份? - – 0m3r