Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用vba循环我的Outlook收件箱_Vba_Outlook - Fatal编程技术网

使用vba循环我的Outlook收件箱

使用vba循环我的Outlook收件箱,vba,outlook,Vba,Outlook,您好,我想检索从2017-06-29到今天的所有电子邮件,但我只在MS access中获得了从今天到2018年7月31日的保存,这代表了过去23天的时间。我的收件箱里有超过7345封电子邮件 我的错误是,循环在第350封电子邮件刚过时就停止了 Sub log_your_inbox_to_ms_access() 'our Outlook folder- deifinitions Dim myItem As MailItem Dim myFolder As Folder

您好,我想检索从2017-06-29到今天的所有电子邮件,但我只在MS access中获得了从今天到2018年7月31日的保存,这代表了过去23天的时间。我的收件箱里有超过7345封电子邮件

我的错误是,循环在第350封电子邮件刚过时就停止了

Sub log_your_inbox_to_ms_access()

    'our Outlook folder- deifinitions
    Dim myItem As MailItem
    Dim myFolder As Folder
    Dim myNamespace As NameSpace
    Set myNamespace = Application.GetNamespace("MAPI")
    'put your folders name here
    'second is possibly 'inbox folder'
    Set myFolder = myNamespace.Folders("GiftCard").Folders("Inbox")

    ' Set up DAO objects (uses existing Access "Email" table).
    Dim rst As DAO.Recordset
    Set rst = CurrentDb.OpenRecordset("Email")

    'Set Up Outlook objects.
    Dim cMail As Outlook.MailItem
    Dim cAtch As Outlook.Attachments


    Set myMail = myFolder.Items
    'MsgBox myMail.Count '7345

    Set objProp = myMail

    iNumMessages = objProp.Count
    If iNumMessages <> 0 Then
        For i = 5 To iNumMessages
            If TypeName(objProp(i)) = "MailItem" Then
                Set cMail = objProp(i)
                Debug.Print cMail.SentOn
                If (CDate(cMail.SentOn) > CDate("2017-06-29") And CDate(cMail.SentOn) < CDate("2018-08-22")) Then
                    rst.AddNew
                    rst!SenderName = cMail.SenderName
                    rst!Sender = cMail.SenderEmailAddress
                    rst!SentOn = cMail.SentOn
                    rst!To = cMail.To
                    rst!CC = cMail.CC
                    rst!Subject = cMail.Subject
                    rst.Update
                End If
            End If
        Next i
    End If



End Sub
将您的\u收件箱\u子日志记录到\u ms\u访问()
'我们的Outlook文件夹-定义
将myItem设置为MailItem
将myFolder设置为文件夹
将myNamespace设置为命名空间
设置myNamespace=Application.GetNamespace(“MAPI”)
'将文件夹名称放在此处
'第二个可能是'收件箱文件夹'
设置myFolder=myNamespace.Folders(“GiftCard”).Folders(“收件箱”)
'设置DAO对象(使用现有的访问“电子邮件”表)。
将rst设置为DAO.Recordset
Set rst=CurrentDb.OpenRecordset(“电子邮件”)
'设置Outlook对象。
将cMail设置为Outlook.MailItem
将捕获设置为Outlook.Attachments
设置myMail=myFolder.Items
“MsgBox myMail.Count”7345
设置objProp=myMail
iNumMessages=objProp.Count
如果信息为0,则
对于i=5到iNumMessages
如果TypeName(objProp(i))=“MailItem”,则
设置cMail=objProp(i)
调试。打印cMail.SentOn
如果(CDate(cMail.SentOn)>CDate(“2017-06-29”)和CDate(cMail.SentOn)

当我调试“I”时,它似乎只包含351个项目

代码中没有明显的错误。因此,您已经知道如何循环遍历文件夹

删除对Access和额外变量的引用后,您应该会发现这段代码本质上是相同的,但更简单。尝试确定问题是否由GiftCard邮箱、Access

Sub log_folder_SimplerExample()

    Dim myNamespace As Namespace
    Dim myFolder As Folder

    Dim myMail As Items
    Dim cMail As mailItem

    Dim iNumMessages As Long
    Dim i As Long

    Set myNamespace = GetNamespace("MAPI")
    'put your folders name here
    'Set myFolder = myNamespace.Folders("GiftCard").Folders("Inbox")
    'Set myFolder = myNamespace.Folders("GiftCard").Folders("Sent Items")
    'Set myFolder = myNamespace.Folders("GiftCard").Folders("Deleted Items")

    ' Check other folders for comparison
    Set myFolder = myNamespace.GetDefaultFolder(olFolderInbox)
    'Set myFolder = myNamespace.GetDefaultFolder(olFolderSentMail)
    'Set myFolder = myNamespace.GetDefaultFolder(olFolderDeletedItems)

    Set myMail = myFolder.Items

    MsgBox myMail.count

    ' Use myMail.count since the result is the expected
    ' Drop possibly extraneous variables

    iNumMessages = myMail.count

    If iNumMessages > 4 Then

        For i = 5 To iNumMessages

            If TypeName(myMail(i)) = "MailItem" Then

                Set cMail = myMail(i)

                Debug.Print i & " - " & myMail(i).SentOn

                If (CDate(cMail.SentOn) > CDate("2017-06-29") And CDate(cMail.SentOn) < CDate("2018-08-22")) Then
                    Debug.Print "   " & cMail.senderName & vbCr
                End If

            End If

        Next i

    End If

    Debug.Print "Done."

End Sub
Sub log\u folder\u simplereExample()
将myNamespace设置为命名空间
将myFolder设置为文件夹
将myMail设置为项目
Dim cMail作为邮件项
黯淡的信息如长
我想我会坚持多久
设置myNamespace=GetNamespace(“MAPI”)
'将文件夹名称放在此处
'Set myFolder=myNamespace.Folders(“GiftCard”).Folders(“收件箱”)
'设置myFolder=myNamespace.Folders(“GiftCard”).Folders(“已发送邮件”)
'Set myFolder=myNamespace.Folders(“GiftCard”).Folders(“已删除的项目”)
'检查其他文件夹以进行比较
设置myFolder=myNamespace.GetDefaultFolder(olFolderInbox)
'设置myFolder=myNamespace.GetDefaultFolder(olFolderSentMail)
'设置myFolder=myNamespace.GetDefaultFolder(olFolderDeletedItems)
设置myMail=myFolder.Items
MsgBox myMail.count
'使用myMail.count,因为结果是预期结果
'删除可能无关的变量
iNumMessages=myMail.count
如果iNumMessages>4,则
对于i=5到iNumMessages
如果TypeName(myMail(i))=“MailItem”,则
设置cMail=myMail(i)
Debug.Print i&“-”&myMail(i).SentOn
如果(CDate(cMail.SentOn)>CDate(“2017-06-29”)和CDate(cMail.SentOn)
尝试使用
ReceivedTime
过滤器-示例显示不需要访问代码。如果是,请编辑要删除的问题。