![](/img/trans.png)
[英]Outlook - Save file from email with .xls attachment and from specific sender then move email to sub folder
[英]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 并将其放入文件名中?
我有另一个宏在电子邮件之前设置文件夹,因此我们不需要创建另一个文件夹
主题行示例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
一些值得在其他上下文中探索的有用日期函数包括
DateDiff
、DatePart
、DateSerial
、 Day 、 Month 、 Year 和IsDate
。IsDate
(检查字符串是否为有效日期)对于UserForms
之类的东西特别有用,您可能希望强制用户在特定文本框中键入有效日期。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.