0

这是我昨天发布的一个问题的后续问题。我觉得我已经非常接近在 VBA 中创建一个模块,该模块将计算一周中特定日期发送的电子邮件数量。目前选择的日期是星期一。

但是,代码还不能工作,Outlook 拒绝查看特定模块。
我确信其中有几个错误。如果有人能指出这些,我将不胜感激。
我还认为此类代码可能对其他人有用以供将来参考,因为此类模块的代码似乎在互联网上并不容易获得(我已经看过了!),但形成了一种搜索参数,许多人会发现有用!

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

  On Error Resume Next

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

  Select Case Weekday(dteDate)
    Case vbMonday
      dteDate = Date
    End Select

  For Each MapiItem In MapiFolderInbox.Messages
    If MapiItem.TimeReceived = Date Then
      Count = Count + 1
      Next MapiItem   
    End If

  EmailCount = objFolder.Items.Count
  Set objFolder = Nothing
  Set objnSpace = Nothing
  Set objOutlook = Nothing

  MsgBox "Number of emails in the folder: " _
    & EmailCount, , "Number of spam messages sent on a Monday: " & Count        
End Sub
4

3 回答 3

0

在调试时删除on error resume next.
它隐藏了错误。如果需要,您可以稍后将其放回。
忽略错误不是一个好主意,最好明确地处理错误。

让我印象深刻的一件事:

For Each MapiItem In MapiFolderInbox.Messages
    If MapiItem.TimeReceived = Date Then
      Count = Count + 1
      Next MapiItem   
    End If

应该

For Each MapiItem In MapiFolderInbox.Messages
  If MapiItem.TimeReceived = Date Then
    Count = Count + 1
  End If
Next MapiItem   

除此之外,在我看来还可以。

于 2011-06-01T22:51:16.680 回答
0

Outlook 仅在参数为空时才看到模块......而不是包含(可选 dteDate 作为日期)。

除此之外,按照 Johan 的建议,模块运行,但只有 Count = 1。也就是说,无论输入如何,周一收到的电子邮件的结果始终为 1。

我也尝试了 adbanginwar 的建议,但在这种情况下,会显示“预期:然后或转到”的编译错误。

于 2011-06-02T14:45:32.250 回答
0

我认为收到的时间更像是一个时间戳,除了日期之外它也有时间。您可能应该像这样使用它;

For Each MapiItem In MapiFolderInbox.Messages   
    If  MapiItem.TimeReceived > YTS And MapiItem.TimeReceived < TTS Then
        Count = Count + 1   
    End If 
Next MapiItem

其中 YTS 和 TTS 是时间戳,它将具有昨天的时间戳和今天的时间戳

例如 01:06:2011:23:59:00 和 02:06:2011:23:59:00

您应该通过调试代码来确认这一点。希望这可以帮助。

于 2011-06-02T04:33:54.413 回答