2014-01-08 4 views
0

Я хочу запустить приложение vba, чтобы найти электронные письма в этом почтовом ящике и дать мне общее количество для каждой даты за последние три дня. Папка верна, и я вижу следующий файл почты. Основная проблема, с которой я сталкиваюсь, заключается в том, что я хочу, чтобы каждый из них заканчивался после того, как он дошел до четвертого дня. Я получаю ошибки компиляции в конце foreach и вложенных операторов if. Нужно ли мне Нуждаться где-нибудь, если это для каждого?vba для каждого цикла с несколькими, если

Sub NonTicketEmailsCount() 

Dim objOutlook As Object, objnSpace As Object, objFolder As MAPIFolder 
Dim EmailCount As Integer 
Dim MailItem 
Set objOutlook = CreateObject("Outlook.Application") 
Set objnSpace = objOutlook.GetNamespace("MAPI") 

On Error Resume Next 
Set objFolder = objnSpace.Folders("Mailbox - IT Support Center").Folders("Non ticket related emails") 
If Err.Number <> 0 Then 
Err.Clear 
MsgBox "No such folder." 
Exit Sub 
End If 

EmailCount = objFolder.Items.Count 

Dim dateStr As String 
Dim dict As Object 
Dim msg As String 
Set dict = CreateObject("Scripting.Dictionary") 
' Determine date of each message: 
For Each MailItem In objFolder.Items 
    rt = MailItem.ReceivedTime 'getting received time for each mailitem 
    nrt = Format(rt, "M/ d/ yyyy") 'formatting the received time to match value of datevalue keyword 
    If DateValue(nrt) = Empty Then 
     NonTicket0 = NonTicket0 + 1 
    ElseIf DateValue(Date - 1) = DateValue(nrt) Then 
     NonTicket1 = NonTicket1 + 1 
    ElseIf DateValue(Date - 2) = DateValue(nrt) Then 
     NonTicket2 = NonTicket2 + 1 
    ElseIf DateValue(Date - 3) = DateValue(nrt) Then 
     NonTicket3 = NonTicket3 + 1 
    ElseIf DateValue(Date - 4) = DateValue(nrt) Then 
     Exit For 

    End If 

msg = "Total NonTicket emails in the folder: " & EmailCount & vbNewLine _ 
& NonTicket1 & " = NonTicket Emails on " & Date - 1 & vbNewLine _ 
& NonTicket2 & " = NonTicket Emails on " & Date - 2 & vbNewLine _ 
& NonTicket3 & " = NonTicket Emails on " & Date - 3 & vbNewLine _ 

MsgBox "Number of emails in the folder: " & EmailCount & vbNewLine _ 
& "NonTicket Emails Yesterday: " & NonTicket1 & vbNewLine _ 
& "NonTicket Emails Yesterday: " & NonTicket2 & vbNewLine _ 
& "NonTicket Emails Yesterday: " & NonTicket3 


'Send Mail 
Set OutApp = CreateObject("outlook.Application") 
Set OutMail = OutApp.CreateItem(o) 
With OutMail 
.Subject = "Non Ticket Emails" 
.To = "[email protected]; [email protected]" 
.Body = msg 
.Display 
End With 

Set OutMail = Nothing 
Set OutApp = Nothing 
Set objFolder = Nothing 
Set objnSpace = Nothing 
Set objOutlook = Nothing 

End Sub 

ответ

0

Вы упускаете NEXT заявление закрыть FOR EACH цикл:

For Each MailItem In objFolder.Items 
    rt = MailItem.ReceivedTime 'getting received time for each mailitem 
    nrt = Format(rt, "M/ d/ yyyy") 'formatting the received time to match value of datevalue keyword 
    If DateValue(nrt) = Empty Then 
     NonTicket0 = NonTicket0 + 1 
    ElseIf DateValue(Date - 1) = DateValue(nrt) Then 
     NonTicket1 = NonTicket1 + 1 
    ElseIf DateValue(Date - 2) = DateValue(nrt) Then 
     NonTicket2 = NonTicket2 + 1 
    ElseIf DateValue(Date - 3) = DateValue(nrt) Then 
     NonTicket3 = NonTicket3 + 1 
    ElseIf DateValue(Date - 4) = DateValue(nrt) Then 
     Exit For 
    End If 
NEXT ' <--- Add this 
+0

омг ... думал, что я пробовал уже. Спасибо. –

Смежные вопросы