Vba 如何获取Outlook电子邮件的接收时间
我需要从用户首选的时间范围内收到的电子邮件中提取附件 对下午2点到4点之间收到的电子邮件说“喜欢摘录” 请找到下面的代码,我已经提取完美的文件-但它在文件夹中的所有电子邮件 请帮我解决这个问题Vba 如何获取Outlook电子邮件的接收时间,vba,outlook,Vba,Outlook,我需要从用户首选的时间范围内收到的电子邮件中提取附件 对下午2点到4点之间收到的电子邮件说“喜欢摘录” 请找到下面的代码,我已经提取完美的文件-但它在文件夹中的所有电子邮件 请帮我解决这个问题 Sub Unzip() Dim ns As NameSpace 'variables for the main functionality Dim Inbox As MAPIFolder Dim SubFolder As MAPIFolder Di
Sub Unzip()
Dim ns As NameSpace 'variables for the main functionality
Dim Inbox As MAPIFolder
Dim SubFolder As MAPIFolder
Dim Atchmt As Attachment
Dim FileName As Variant
Dim msg As Outlook.MailItem
Dim FSO As Object 'variables for unzipping
Dim oApp As Object
Dim FileNameFolder As Variant
Dim Totalmsg As Object
Dim oFrom
Dim oEnd
Set ns = GetNamespace("MAPI")
Set Inbox = ns.GetDefaultFolder(olFolderInbox)
Set SubFolder = Inbox.Folders("TEST")
Set Totalmsg = msg.ReceivedTime
oFrom = InputBox("Please give start time", ("Shadowserver report"))
oEnd = InputBox("Please give End time", ("Shadowserver report"))
If Totalmsg <= oFrom And Totalmsg >= oEnd Then
For Each msg In SubFolder.Items
For Each Atchmt In msg.Attachments
If (Right(Atchmt.FileName, 3) = "zip") Then
MsgBox "1"
FileNameFolder = "C:\Users\xxxx\Documents\test\"
FileName = FileNameFolder & Atchmt.FileName
Atchmt.SaveAsFile FileName
Set oApp = CreateObject("Shell.Application")
oApp.NameSpace(FileNameFolder).CopyHere oApp.NameSpace(FileName).Items
Kill (FileName)
On Error Resume Next
Set FSO = CreateObject("scripting.filesystemobject")
FSO.deletefolder Environ("Temp") & "\Temporary Directory*", True
End If
Next
Next
End If
End Sub
Sub-Unzip()
Dim ns作为主要功能的命名空间变量
将收件箱设置为MAPI文件夹
将子文件夹变暗为MAPIFolder
以附件形式提交
变暗文件名作为变量
将消息作为Outlook.mailtim
Dim FSO作为对象变量用于解压缩
作为对象的Dim oApp
Dim FileNameFolder作为变量
作为对象的Dim Totalmsg
昏暗的房间
黯淡
设置ns=GetNamespace(“MAPI”)
设置收件箱=ns.GetDefaultFolder(olFolderInbox)
Set SubFolder=Inbox.Folders(“测试”)
设置Totalmsg=msg.ReceivedTime
oFrom=InputBox(“请给出开始时间”(“Shadowserver报告”))
oEnd=InputBox(“请给出结束时间”(“Shadowserver报告”))
如果Totalmsg=oEnd,则
对于子文件夹中的每个msg.Items
对于消息附件中的每个Atchmt
如果(右(Atchmt.FileName,3)=“zip”),则
MsgBox“1”
FileNameFolder=“C:\Users\xxxx\Documents\test\”
FileName=FileNameFolder&Atchmt.FileName
Atchmt.SaveAsFile文件名
设置oApp=CreateObject(“Shell.Application”)
名称空间(FileNameFolder).CopyHere-oApp.NameSpace(FileName).Items
Kill(文件名)
出错时继续下一步
设置FSO=CreateObject(“scripting.filesystemobject”)
FSO.deletefolder环境(“Temp”)和“\Temporary Directory*”,True
如果结束
下一个
下一个
如果结束
端接头
我只想包括您需要更改的部分。其他线路也一样。基本上,您需要做的是在循环中为每个msg
设置Totalmsg
Sub Unzip()
'... copy your code till here
Set SubFolder = Inbox.Folders("TEST")
oFrom = InputBox("Please give start time", ("Shadowserver report"))
oEnd = InputBox("Please give End time", ("Shadowserver report"))
For Each msg In SubFolder.Items
Set Totalmsg = msg.ReceivedTime
If Totalmsg <= oFrom And Totalmsg >= oEnd Then 'You check it for each msg
'rest will be the same until ...
FSO.deletefolder Environ("Temp") & "\Temporary Directory*", True
End If
Next
End If
Next
End Sub
Sub-Unzip()
'... 把你的密码复制到这里
Set SubFolder=Inbox.Folders(“测试”)
oFrom=InputBox(“请给出开始时间”(“Shadowserver报告”))
oEnd=InputBox(“请给出结束时间”(“Shadowserver报告”))
对于子文件夹中的每个msg.Items
设置Totalmsg=msg.ReceivedTime
如果Totalmsg=oEnd,则“您需要检查每个消息
“其余的都一样,直到。。。
FSO.deletefolder环境(“Temp”)和“\Temporary Directory*”,True
如果结束
下一个
如果结束
下一个
端接头
进行了一些改进以提高性能和清晰度:
MsG.ReceivedTime
)和改进的输入消息选项Explicit
,以避免将来编码时发生意外(非常好的做法)Environ$(“USERPROFILE”)
获取用户目录的路径LCase
以确保获得所有拉链(包括.ZIP
)Option Explicit
Sub Unzip()
'''Variables for the main functionality
Dim NS As NameSpace
Dim InboX As MAPIFolder
Dim SubFolder As MAPIFolder
Dim MsG As Outlook.MailItem
Dim AtcHmt As Attachment
Dim ReceivedHour As Date
Dim oFrom As Date
Dim oEnd As Date
'''Variables for unzipping
Dim FSO As Object
Dim ShellApp As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
Set ShellApp = CreateObject("Shell.Application")
Dim FileNameFolder As Variant
Dim FileName As Variant
'''Define the Outlook folder you want to scan
Set NS = GetNamespace("MAPI")
Set InboX = NS.GetDefaultFolder(olFolderInbox)
Set SubFolder = InboX.Folders("TEST")
'''Define the folder where you want to save attachments
FileNameFolder = Environ$("USERPROFILE") & "\Documents\test\"
'''Define the hours in between which you want to apply the extraction
oFrom = CDate(InputBox("Please give Start time" & vbCrLf & _
"Example: 9AM", ("Shadowserver report"), "9AM"))
oEnd = CDate(InputBox("Please give End time" & vbCrLf & _
"Example: 6PM", ("Shadowserver report"), "6PM"))
For Each MsG In SubFolder.items
ReceivedHour = MsG.ReceivedTime
If oFrom <= TimeValue(ReceivedHour) And _
TimeValue(ReceivedHour) <= oEnd Then
For Each AtcHmt In MsG.Attachments
FileName = AtcHmt.FileName
If LCase(Right(FileName, 3)) <> "zip" Then
Else
FileName = FileNameFolder & FileName
AtcHmt.SaveAsFile FileName
ShellApp.NameSpace(FileNameFolder).CopyHere _
ShellApp.NameSpace(FileName).items
Kill (FileName)
On Error Resume Next
FSO.deletefolder Environ$("Temp") & "\Temporary Directory*", True
End If
Next AtcHmt
End If
Next MsG
End Sub
选项显式
子解压缩()
“主要功能的变量”
Dim NS作为名称空间
将收件箱设置为MAPI文件夹
将子文件夹变暗为MAPIFolder
将消息作为Outlook.mailtim
以附件形式提交
Dim作为日期接收小时数
ROM的Dim作为日期
日期
''用于解压缩的变量
作为对象的Dim FSO
将ShellApp设置为对象
设置FSO=CreateObject(“Scripting.FileSystemObject”)
设置ShellApp=CreateObject(“Shell.Application”)
Dim FileNameFolder作为变量
变暗文件名作为变量
''定义要扫描的Outlook文件夹
设置NS=GetNamespace(“MAPI”)
设置收件箱=NS.GetDefaultFolder(olFolderInbox)
Set SubFolder=InboX.Folders(“测试”)
''定义要保存附件的文件夹
FileNameFolder=Environ$(“USERPROFILE”)和“\Documents\test\”
''定义要应用提取的时间间隔
oFrom=CDate(输入框(“请给出开始时间”&vbCrLf&_
“示例:上午9点”(“Shadowserver报告”),“上午9点”)
oEnd=CDate(输入框(“请给出结束时间”&vbCrLf&_
“示例:6PM”(“Shadowserver报告”),“6PM”))
对于子文件夹.items中的每个MsG
ReceivedHour=MsG.ReceivedTime
如果是Rom Hi R3uK的话,这就像一个职业选手。但是请告诉我是否可以将日期包含在其中?@kfdhivya:当然可以,如果您想在输入框中输入日期,我想您必须删除TimeValue
,但其余的不需要修改。在调试时使用断点。打印
或间谍来检查日期是否正常工作。嗨,R3uk,我试图删除时间值,结果把整个事情搞砸了。你能帮忙吗me@kfdhivya:为什么要删除时间值
?如果它来自TimeValue(ReceivedHour)
,您不能这样做,因为MsG.ReceivedTime
也包含日期,所以您不能将它与时间戳进行比较。很抱歉,我只是一个初学者,正如您之前的评论一样,我做了,但最后我把整个代码搞乱了。。接受答案有助于其他人回答同样的问题。