Vba 如何获取Outlook电子邮件的接收时间

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

我需要从用户首选的时间范围内收到的电子邮件中提取附件

对下午2点到4点之间收到的电子邮件说“喜欢摘录”

请找到下面的代码,我已经提取完美的文件-但它在文件夹中的所有电子邮件

请帮我解决这个问题

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
    也包含日期,所以您不能将它与时间戳进行比较。很抱歉,我只是一个初学者,正如您之前的评论一样,我做了,但最后我把整个代码搞乱了。。接受答案有助于其他人回答同样的问题。