我的excel vba代码遇到了一些麻烦。 每天,我(和同事)都会收到一封格式相同的邮件。 我想导入邮件的时间/日期和主题,如果邮件满足以下要求: *主题包含“订单” *接收时间> =(基于范围) *接收时间<=(基于范围) *特定发件人名称(基于范围)
当我使用自己的Outlook帐户时,代码工作得很好。但是,当同事尝试运行它时,特定发件人名称的条件将给出错误438“对象不支持此属性或方法”。
当我删除特定发件人姓名的条件时,该代码将在我的同事帐户中起作用。我的同事帐户中的发件人姓名与我自己的Outlook帐户中的发件人姓名完全相同。 (显然,strMailboxName和文件夹已更改为我的同事在尝试运行代码之前在Outlook中使用的名称)
注意:我的同事在“文件夹”中有“日历”约会,但我没有(但不是由SenderName发送的)。此外,我的同事从SenderName接收有关其他主题的邮件。
Sub Outlook()
Dim OutlookApp As Outlook.Application
Dim OutlookNamespace As Namespace
Dim Folder As MAPIFolder
Dim OutlookMail As Variant
Dim strMailboxName As String
Dim i As Integer
strMailboxName = "OutlookName" 'Name of mailaccount
Set OutlookApp = New Outlook.Application
Set OutlookNamespace = OutlookApp.GetNameSpace("MAPI")
Set Folder = Session.Folders(strMailboxName)
Set Folder = Folder.Folders("FolderName") 'Name of folder
i = 1
For Each OutlookMail In Folder.Items
If InStr(OutlookMail.Subject, "Order") > 0 And OutlookMail.ReceivedTime >= Range("start_date").Value And OutlookMail.ReceivedTime <= Range("end_date") And OutlookMail.Sender = Range("Sender") Then
Range("Date_and_time").Offset(i, 0).Value = OutlookMail.ReceivedTime
Range("Date_and_time").Offset(i, 0).VerticalAlignment = xlTop
Range("Subject").Offset(i, 0).Value = OutlookMail.Subject
Range("Subject").Offset(i, 0).VerticalAlignment = xlTop
i = i + 1
End If
Next OutlookMail
Set Folder = Nothing
Set OutlookNamespace = Nothing
Set OutlookApp = Nothing
End Sub
有人知道为什么会发生这种情况以及如何解决这个问题吗?这是代码问题还是我同事邮件帐户的某种设置问题?
感谢您的帮助!提前致谢。
答案 0 :(得分:1)
首先,永远不要循环浏览文件夹中的所有项-使用Items.Find/FindNext
或Items.Restrict
。
第二,文件夹中可以包含MailItem
以外的其他项目-您还可以包含ReportItem
(用于NDR)和MeetingItem
(用于约会邀请/更新)。
请先检查OutlookMail.Class
属性= 43(olMailItem
)。