这是我昨天发布的一个后续问题。我觉得我已经非常接近在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
答案 0 :(得分: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
除此之外我觉得还不错。
答案 1 :(得分: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
你应该通过调试你的代码来确认这一点。希望这有帮助。
答案 2 :(得分:0)
Outlook仅在参数为空时才会看到模块...而不是包含(可选dteDate为日期)。
除此之外,按照Johan的建议,模块运行,但只有Count = 1.也就是说,无论输入如何,周一收到的电子邮件结果始终为1。
我也尝试了adbanginwar的建议,但在这种情况下会显示'Expected:Then or GoTo'的编译错误。