このサイトで最初に見つけたいくつかのコード (fmunkert、2012) を変更しました。このコードは、最初はセット フォルダー内のアイテム (メール) の数をカウントしていました。
次に、2 つのメッセージ出力を生成します (メッセージ 1: フォルダー内の総メール数、メッセージ 2: 日付のリスト)。
モジュールを修正して、2 つのセット フォルダーをカウントし、それらを 2 つのメッセージのそれぞれの全体的な統計の 1 つのセットに結合します。
これらのフォルダーは 1 年をカバーするので、2 番目のメッセージを制限して、過去 30 日間の日付のみを表示するようにしたいので、これをチェックすると思われる領域を設定しようとしました。
ただし、約3つの日付が乱数を示すのとは別に、1つのアイテムを示すすべての日付を取得します。
私の完全に変更されたコード
Sub InboxEmails()
Dim objOutlook As Object, objnSpace As Object, objFolder As MAPIFolder, objFolder1 As MAPIFolder, objFolder2 As MAPIFolder
Dim EmailCount1 As Integer
Dim EmailCount2 As Integer
Set objOutlook = CreateObject("Outlook.Application")
Set objnSpace = objOutlook.GetNamespace("MAPI")
' Verify exisitence of 2013 Actioned / Updated Folder
On Error Resume Next
Set objFolder1 = objnSpace.Folders("test@sample.net").Folders("Inbox").Folders("Alico Metlife Actioned / Updated").Folders("2013 (Actioned / Updated)")
If Err.Number <> 0 Then
Err.Clear
MsgBox "2013 Actioned / Updated Folder Not Found."
Exit Sub
End If
' Verify exisitence of 2013 IRs Raised Folder
On Error Resume Next
Set objFolder2 = objnSpace.Folders("test@sample.net").Folders("Inbox").Folders("Alico MetLife IRs Raised").Folders("2013 (IRs Raised)")
If Err.Number <> 0 Then
Err.Clear
MsgBox "2013 IRs Raised Folder Not Found."
Exit Sub
End If
'All folders are present, OK to continue.
EmailCount1 = objFolder1.Items.Count
EmailCount2 = objFolder2.Items.Count
MsgBox "Number of chargeable emails: " & EmailCount1 + EmailCount2
Dim dateStr As String
Dim myItems1 As Outlook.Items
Dim myItems2 As Outlook.Items
Dim dict As Object
Dim msg As String
Set dict = CreateObject("Scripting.Dictionary")
Set myItems1 = objFolder1.Items
Set myItems2 = objFolder2.Items
myItems.SetColumns ("SentOn")
' Determine date of each message:
For Each myItem In myItems1
dateStr = GetDate(myItem.SentOn)
If Not dict.Exists(dateStr) Then
dict(dateStr) = 0
End If
dict(dateStr) = CLng(dict(dateStr)) + 1
Next myItem
' Determine date of each message:
For Each myItem In myItems2
dateStr = GetDate(myItem.SentOn)
If Not dict.Exists(dateStr) Then
dict(dateStr) = 0
End If
dict(dateStr) = CLng(dict(dateStr)) + 1
Next myItem
' Output counts per day:
msg = ""
For Each o In dict.Keys
msg = msg & o & ": " & dict(o) & " items" & vbCrLf
Next
MsgBox msg
Set objFolder = Nothing
Set objnSpace = Nothing
Set objOutlook = Nothing
End Sub
試みのバージョン 1
If Not dict.Exists(dateStr >= IsDate(Now) - 30) Then
試みのバージョン 2
If Not dict.Equals(dateStr >= IsDate(Now) - 30) Then
試行バージョン 3
If Not dateStr >= IsDate(Now) - 30 Then
私が変更する必要があるのはこの領域であると確信していますが、私は仕事に取り掛かることができません. これでどこが間違っているのかを知っていただければ幸いです。
編集:私はこれについてさらに調査を行っており、正しい軌道に乗っていることを知っています。これが私の最新のコードです
Dim dateStr As Date
Dim myItems2 As Outlook.Items
Dim dict As Object
Dim msg As String
Dim lastweek As Date
Set dict = CreateObject("Scripting.Dictionary")
Set myItems2 = objFolder2.Items
myItems2.SetColumns ("SentOn")
'Determine date of each message:
For Each myItem In myItems2
dateStr = GetDate(myItem.SentOn)
lastweek = Date
If Not dict.Item(dateStr) >= ((lastweek) - 30) Then
dict.Remove myItems2.myItem
Else
dict(dateStr) = CLng(dict(dateStr)) + 1
End If
Next myItem
各行でウォッチを使用して日付が期待どおりに通過するようにしましたが、これは if ステートメントの else 部分にはまだ行きません。
「dateStr」はアイテムの日付を示し、「(lastweek) - 30」は現在の日付の 30 日前の日付を示します。
これがifステートメントにあるので、日付が30日以内であるステートメントのelse部分に移動することを期待しています。ただし、これは発生しません。理由がわかりません。
参照
fmunkert (2012)、Outlook で日付ごとに電子メールを数える[オンライン] (アクセス 03/2013)