원래이 사이트에서 발견 된 일부 코드 (fmunkert, 2012)는 원래 세트 폴더의 항목 (이메일) 수를 계산 한 것입니다.날짜 사이의 Outlook vba 개수 폴더 항목
다음 두 개의 메시지 출력 (메시지 1 : 폴더의 총 전자 메일, 메시지 2 : 날짜 별 목록)을 생성합니다.
두 세트의 폴더를 계산하고이를 두 메시지 각각에 대한 전체 통계의 한 세트로 결합하도록 모듈을 수정했습니다.
이 폴더는 1 년 내내 다 음과 같이 마지막 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("[email protected]").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("[email protected]").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
입니다 날짜를 통해 예상대로 그러나 이것은 여전히 진술의 else 부분으로 이동하지 않습니다.
'dateStr'은 항목의 날짜를 표시하며 '(lastweek) - 30'은 현재 날짜의 30 일 이전 날짜를 표시합니다.
이 문장은 if 문에 포함되어 있기 때문에 날짜가 30 일 이내 인 명세서의 else 부분으로 이동해야합니다. 그러나 이것은 발생하지 않으며, 나는 왜 볼 수 없습니다.
참조
fmunkert (2012), [온라인] Counting emails in outlook by date (액세스 03/2013)