Модуль подсчета писем VBA! - PullRequest
0 голосов
/ 01 июня 2011

Это дополнительный вопрос, который я отправил вчера.Я чувствую, что уже достаточно близко к созданию модуля в 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

Ответы [ 3 ]

0 голосов
/ 02 июня 2011

я думаю, что полученное время - это скорее метка времени, где в дополнение к дате у него тоже будет время.вам, вероятно, следует использовать его следующим образом:

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

Вы должны подтвердить это, отладив свой код.надеюсь, это поможет.

0 голосов
/ 02 июня 2011

Outlook видит модуль только тогда, когда параметры оставлены пустыми ... вместо того, чтобы содержать (Необязательно дата dteDate As).

Кроме этого, после предложения Йохана, модуль работает, но тольковсегда имеет счет = 1. То есть, что результат электронных писем, полученных в понедельник, всегда равен 1. Независимо от ввода.

Я также попробовал предложение adbanginwar, но в этом случае ошибка компиляции «Ожидается: затемили GoTo 'отображается.

0 голосов
/ 02 июня 2011

Пока отладка сбрасывает 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   

Кроме того, это выглядит нормально для меня.

...