【问题标题】:How to reference item to count messages in inbox?如何引用项目来计算收件箱中的邮件?
【发布时间】:2011-09-10 03:52:36
【问题描述】:

一个小错误导致此计数代码无法运行。

Sub Count2
  Dim objOutlook As Object, objnSpace As Object, objFolder As Object
  Dim Count As Integer
  Set objOutlook = CreateObject("Outlook.Application")
  Set objnSpace = objOutlook.GetNamespace("MAPI")

  Set objFolder = objnSpace.Folders("My Personal Emails").Folders("spam")
  If Err.Number <> 0 Then
    Err.Clear
    MsgBox "No such folder."
    Exit Sub
  End If

  For Each MapiItem In MapiFolderInbox.Messages
  Select Case Weekday(MapiItem.TimeReceived)
    Case vbMonday
      Count = Count + 1
    End Select
  Next MapiItem

  MsgBox "Number of spam messages sent on a Monday: " & Count
End Sub

错误信息:

运行时错误“424”: 需要对象

调试器突出显示该行:

For Each MapiItem In MapiFolderInbox.Messages

【问题讨论】:

  • 我不是 VBA 专家,但我认为您需要在使用 MapiItemMapiFolderInbox 之前声明它们。
  • 好的 - 我将以上两个都声明为对象。错误消息已更改为:运行时错误'91':对象变量或未设置块变量

标签: vba outlook outlook-2003


【解决方案1】:

好的,这是一个工作版本:

Sub Count2()

Dim i As Integer, Count As Integer
Dim objOutlook As Outlook.Application
Dim objNSpace As Outlook.NameSpace
Dim objFolder As Outlook.Folder

Set objOutlook = CreateObject("Outlook.Application")
Set objNSpace = objOutlook.GetNamespace("MAPI")
Set objFolder = objNSpace.Folders("My Personal Emails").Folders("spam")

Count = 0
For i = 1 To objFolder.Items.count

  If Weekday(objFolder.Items(i).ReceivedTime) = vbMonday Then
    Count = Count + 1
  End If

Next i

MsgBox "Number of spam messages sent on a Monday: " & Count

End Sub

【讨论】:

  • 看起来 OP 想要遍历收件箱消息——而不是垃圾邮件。 (编辑:实际上,该消息确实表明对垃圾邮件文件夹的引用——MapiFolderInbox 变量是罪魁祸首)。
  • 这看起来很有希望!等不及要检查它是否有效 - 如果有效,我会报告。
  • 它工作了 - 部分。对于较小的文件夹之一,它可以毫无问题地列出相应的计数。对于一些较大的邮件,Outlook 非常吃力(10 分钟才能计算一个包含大约 5,000 封电子邮件的文件夹)。然而,非常令人惊讶的是,当在同一个文件夹中执行后续搜索时,它似乎变得更快。最大的文件夹之一产生了一条我以前没有遇到过的错误消息。
  • 我不确定它是否会加快速度,但请尝试在循环之前将objFolder.Items.Count 存储在变量中。像totalMessages = objFolder.Items.Count 然后For i = 1 To totalMessages
【解决方案2】:

编辑:--您似乎希望统计垃圾邮件,根据您的 VBA 代码中的最后一个字符串来判断。采用@sitnik 的解决方案似乎是更好的方法。

MapiFolderInbox 似乎未定义 - 尝试将其分配给您的收件箱文件夹,例如:

 Set MapiFolderInbox = objnSpace.Folders("My Personal Emails").Folders("Inbox")

另见:Option Explicit On

【讨论】:

    猜你喜欢
    • 2011-10-11
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多