【问题标题】:vba for each loop with multiple if具有多个 if 的每个循环的 vba
【发布时间】:2014-01-08 18:34:51
【问题描述】:

我想运行一个 vba 应用程序来查找此邮箱中的电子邮件,并给我最近三天每个日期的总数。文件夹是正确的,我可以看到下一个邮件项。我遇到的主要问题是我希望 for each 在它到达第四天后结束。我在 foreach 和嵌套 if 语句的末尾收到编译错误。如果是 for each,我需要在任何地方都有 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

【问题讨论】:

    标签: vba if-statement foreach


    【解决方案1】:

    您缺少用于关闭 FOR EACH 循环的 NEXT 语句:

    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
    

    【讨论】:

      猜你喜欢
      • 2011-10-06
      • 2019-10-29
      • 2015-08-31
      • 1970-01-01
      • 2014-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多