2011-06-07 37 views
-1

好的 - 这似乎差不多完成了;但是一个小错误阻止了这个计数代码的运行。用于Outlook的VBA代码中的小错误!

下面是代码:

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' 运行时: 所需的对象

调试器突出了线:

对于MapiFolderInbox.Messages中的每个MapItem项目

任何帮助,将不胜感激!

+0

我不是VBA专家,但我认为你需要在使用它们之前声明'MapiItem'和'MapiFolderInbox'。 – sitnik 2011-06-07 14:59:27

+0

好的 - 我将上面的两个声明为对象。错误消息已更改为:运行时错误'91':对象变量或未设置块变量 – 2011-06-07 15:07:02

回答

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 
+0

它看起来像OP想要遍历收件箱邮件 - 而不是垃圾邮件。 (编辑:实际上,该消息确实指示了对垃圾邮件文件夹的引用 - 然后MapiFolderInbox变量是罪魁祸首)。 – Nick 2011-06-08 06:47:25

+0

这看起来很有希望!迫不及待地检查它是否有效 - 如果有,我会回报。 – 2011-06-08 09:28:21

+0

那么,它工作? – sitnik 2011-06-08 18:22:49

1

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

MapiFolderInbox似乎是不确定的 - 试图将其分配给您的收件箱文件夹,这样的:

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

另见:Option Explicit On