使用vba循环我的Outlook收件箱
您好,我想检索从2017-06-29到今天的所有电子邮件,但我只在MS access中获得了从今天到2018年7月31日的保存,这代表了过去23天的时间。我的收件箱里有超过7345封电子邮件 我的错误是,循环在第350封电子邮件刚过时就停止了使用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
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
过滤器-示例显示不需要访问代码。如果是,请编辑要删除的问题。