每个循环的vba有多个if

时间:2014-01-08 18:34:52

标签: vba if-statement foreach

我想运行一个vba应用程序来查找此邮箱中的电子邮件,并向我提供过去三天中每个日期的总数。该文件夹是正确的,我可以看到下一个mailitem。我遇到的主要问题是,我希望每个人在第四天结束后结束。我在foreach和嵌套if语句结束时收到编译错误。如果它适用于每个人,我是否需要拥有Next?

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 = "kylesparmark@glissondo.com; meisnert@glissondo.com"
.Body = msg
.Display
End With

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

End Sub

1 个答案:

答案 0 :(得分: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