(VBA)如何通过选择日期范围将outlook电子邮件导出到excel

(VBA)如何通过选择日期范围将outlook电子邮件导出到excel,excel,vba,date,filter,outlook,Excel,Vba,Date,Filter,Outlook,我已经成功地编写了一个VBA代码来将outlook电子邮件导出到excel,但似乎我一直在编写一个代码来根据日期范围导出电子邮件。代码如下: Sub getMailbyDate() Dim i As Long Dim arrHeader As Variant Dim olNS As Namespace Dim olInboxFolder As MAPIFolder Dim olItems As Items Dim olItem As

我已经成功地编写了一个VBA代码来将outlook电子邮件导出到excel,但似乎我一直在编写一个代码来根据日期范围导出电子邮件。代码如下:

  Sub getMailbyDate()
    Dim i As Long
    Dim arrHeader As Variant
    
    Dim olNS As Namespace
    Dim olInboxFolder As MAPIFolder
    Dim olItems As Items
    Dim olItem As Variant
    
    Set olNS = GetNamespace("MAPI")
    Set olInboxFolder = olNS.PickFolder 'Pick folder
    Set olItems = olInboxFolder.Items
      
        
    

    Dim StartDate As Date, EndDate As Date
    
    arrHeader = Array("Date Created", "SenderEmailAddress", "Subject", "Body")
    ThisWorkbook.Worksheets("Output").Range("A1").Resize(1, UBound(arrHeader) + 1).Value = arrHeader
    
    ActiveSheet.Range("E2", Range("E2").End(xlDown)).NumberFormat = "mm/dd/yyyy h:mm AM/PM"
    
    
    
    i = 1
    
    
rngA = ThisWorkbook.Worksheets(1).Range("B7").Value
rngB = ThisWorkbook.Worksheets(1).Range("B8").Value
  
StartDate = DateValue(rngA)
EndDate = DateValue(rngB)

    
For Each olItem In olItems
        ' MailItem
        If olItem.Class = olMail Then
            If olItem.SentOn >= StartDate And olItem.SentOn <= EndDate Then
            ThisWorkbook.Worksheets("Output").Cells(i + 1, "A").Value = olItems(i).CreationTime
            ThisWorkbook.Worksheets("Output").Cells(i + 1, "B").Value = olItems(i).SenderEmailAddress
            ThisWorkbook.Worksheets("Output").Cells(i + 1, "C").Value = olItems(i).Subject
            ThisWorkbook.Worksheets("Output").Cells(i + 1, "D").Value = olItems(i).Body
            End If
        ' ReportItem
        ElseIf olItem.Class = olReport Then
            ThisWorkbook.Worksheets("Output").Cells(i + 1, "A").Value = olItems(i).CreationTime
            ThisWorkbook.Worksheets("Output").Cells(i + 1, "B").Value = _
            olItems(i).PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x0E04001E")  'PR_DISPLAY_TO
            ThisWorkbook.Worksheets("Output").Cells(i + 1, "C").Value = olItems(i).Subject
          End If
           

            
        
        
        i = i + 1
Next olItem
    
    ThisWorkbook.Worksheets(3).Cells.EntireColumn.AutoFit
    
    MsgBox "Export complete.", vbInformation
           
    Set olItems = Nothing
    Set olInboxFolder = Nothing
    Set olNS = Nothing
End Sub

这就是你想要的吗?正如我在上面的评论中提到的,您需要拆分IFs,因为
.SentOn
将为报告项提供一个错误

'
'~~> Rest of your code
'

Dim StartDate As Date, EndDate As Date

'~~> rngA and rngB are relevant ranges
StartDate = DateValue(rngA.Value2)
EndDate = DateValue(rngB.Value2)

For Each olItem In olItems
    If olItem.Class = olMail Then
        If olItem.SentOn >= StartDate And olItem.SentOn <= EndDate Then
            '~~> Rest of your code

            i = i + 1
        End If
    ElseIf olItem.Class = olReport Then
        '~~> Rest of your code

         i = i + 1
    End If
Next olItem

'
'~~> Rest of your code
'
'
“~~>其余的代码
'
Dim StartDate作为日期,EndDate作为日期
'~~>rngA和rngB是相关范围
StartDate=DateValue(rngA.Value2)
EndDate=DateValue(rngB.Value2)
对于每个olItem,在olItem中
如果olItem.Class=olMail,则
如果olItem.SentOn>=StartDate,并且olItem.SentOn包含代码的其余部分
i=i+1
如果结束
下一代
'
“~~>其余的代码
'

olItem.SentOn>=StartDate和olItem.SentOn对象不支持此方法。您如何定义
StartDate
EndDate
,它们的值是什么?如果
如果olItem.Class=olMail和olItem.SentOn>=SinceDate,那么
对您有效,那么我的建议应该对您有效。
将StartDate设置为Date Dim EndDate设置为Date StartDate=Format(thish工作簿.Worksheets(1).范围(“B7”).Value,“mm/dd/yyyy”)EndDate=Format(thish工作簿.Worksheets(1).范围(“B8”)如果olItem.Class=olMail和olItem.SentOn>=StartDate和olItem.SentOn No。。。Format()不是将其转换为日期,而是一个字符串。您需要像在
DateValue(inpSinceDate$)中那样将其转换为日期。
注释不用于扩展讨论;此对话已被删除。@SamuelLiew:我刚刚注意到我没有“自动将此讨论移动到聊天”选项。这不仅发生在这篇文章中,也发生在其他文章中。。。我快速搜索了一下,发现了这篇文章。如果这是真的,那么我应该如何从用户那里获得澄清?mod created rooms会自动向所有参与者授予写入权限,例如:正确,但我如何才能创建它,以使mod不会承担这些琐碎的任务?如果任何用户不符合要求,您不能。
'
'~~> Rest of your code
'

Dim StartDate As Date, EndDate As Date

'~~> rngA and rngB are relevant ranges
StartDate = DateValue(rngA.Value2)
EndDate = DateValue(rngB.Value2)

For Each olItem In olItems
    If olItem.Class = olMail Then
        If olItem.SentOn >= StartDate And olItem.SentOn <= EndDate Then
            '~~> Rest of your code

            i = i + 1
        End If
    ElseIf olItem.Class = olReport Then
        '~~> Rest of your code

         i = i + 1
    End If
Next olItem

'
'~~> Rest of your code
'