2011-06-07 47 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