有人可以指出我在这里缺少的东西。每次我运行它都说需要一个对象。
我道歉我觉得这是一个非常简单的修复,但我已经破坏了我的大脑一段时间。
基本上我想要完成的是计算有多少电子邮件被标记为高重要性。
我觉得这是一个如此简单的错误,但我仍在学习这个。
Sub CheckForImportance()
Dim myNs As Outlook.NameSpace
Dim infldr As Outlook.Folder
Dim impMail As Outlook.MailItem
Dim ttlcount As Integer
Set myNs = Application.GetNamespace("MAPI")
Set infldr = myNs.GetDefaultFolder(olFolderInbox)
Set impMail = infldr.Items
Set ttlcount = 0
If impMail.Importance = olImportanceHigh Then ttlImp = ttlImp + 1
MsgBox ("count:" & ttlImp)
End Sub
答案 0 :(得分:0)
Outlook将邮件项目,日历项目,任务等存储在称为商店的文件中。有时候人们说邮件等等都存储在PST文件中,这通常是正确的。但是,所有PST文件都是存储,但并非所有存储都是PST文件。
我记得发送到任何电子邮件地址的邮件的默认值是加载到同一商店的。在这种情况下,Set infldr = myNs.GetDefaultFolder(olFolderInbox)
非常有用,因为默认收件箱位于该商店中。
使用Outlook 2016以及其他一些最新版本,默认情况下,每个电子邮件地址都有一个单独的商店。这些商店中的每一个都以电子邮件地址命名,例如:“JohnDoe@hotmail.com”或“DoeJ@gmail.com”。
将此宏复制到Outlook模块并运行它:
Sub DsplUsernameOfDefaultStore()
Dim NS As Outlook.NameSpace
Dim DefaultInboxFldr As MAPIFolder
Set NS = CreateObject("Outlook.Application").GetNamespace("MAPI")
Set DefaultInboxFldr = NS.GetDefaultFolder(olFolderInbox)
Debug.Print DefaultInboxFldr.Parent.Name
End Sub
在我的系统上,此宏输出“Outlook Data File”。这是Outlook附带的默认商店,但我的电子邮件都没有加载到它。
您将需要以下内容:
Set infldr = Session.Folders("Xxxx").Folders("Inbox")
其中Xxxx是包含您要查询的收件箱的商店的名称。
下面我有三个替代宏来计算收件箱中高重要性电子邮件的数量。要点特别注意:
For Each
循环。版本2使用For IndexVariable
循环。据我所知,For
两种类型都没有优势。我使用的任何一个看起来更方便的任务。版本3使用过滤器。我没有发现Outlook过滤器的用途经常足以成为其使用的专家,因此我通常使用For
循环。 olImportanceHigh
是一个值为2的常量。看起来你不能在Restrict
字符串中使用常量,这就是[Importance] = 2
的原因。 Debug.Print
在开发过程中比MsgBox
更方便。如有必要,请回答有关我的代码的问题。
Option Explicit
Sub CountHighImportanceEmails1()
Dim FldrInbox As Folder
Dim MailItemCrnt As MailItem
Dim NumEmailsHighImport As Long
Set FldrInbox = Session.Folders("Xxxx").Folders("Inbox")
NumEmailsHighImport = 0
For Each MailItemCrnt In FldrInbox.Items
If MailItemCrnt.Importance = olImportanceHigh Then
NumEmailsHighImport = NumEmailsHighImport + 1
End If
Next
Debug.Print "Number of high importance emails=" & NumEmailsHighImport
End Sub
Sub CountHighImportanceEmails2()
Dim FldrInbox As Folder
Dim InxMi As Long
Dim NumEmailsHighImport As Long
Set FldrInbox = Session.Folders("Xxxx").Folders("Inbox")
NumEmailsHighImport = 0
With FldrInbox
For InxMi = 1 To .Items.Count
If .Items(InxMi).Importance = olImportanceHigh Then
NumEmailsHighImport = NumEmailsHighImport + 1
End If
Next
End With
Debug.Print "Number of high importance emails=" & NumEmailsHighImport
End Sub
Sub CountHighImportanceEmails3()
Dim FldrInbox As Folder
Dim MailItemsHighImport As Items
Set FldrInbox = Session.Folders("Xxxx").Folders("Inbox")
Set MailItemsHighImport = FldrInbox.Items.Restrict("[Importance] = 2")
Debug.Print "Number of high importance emails=" & MailItemsHighImport.Count
End Sub
答案 1 :(得分:0)
示例将是
Option Explicit
Public Sub Example()
Dim Inbox As Outlook.folder
Set Inbox = Application.Session.GetDefaultFolder( _
olFolderInbox)
Dim Filter As String
Filter = "[Importance] = 2"
Dim Items As Outlook.Items
Set Items = Inbox.Items.Restrict(Filter)
Debug.Print Items.Count
MsgBox Items.Count & " High importance Items are in " & Inbox.Name
End Sub