从特定时间段将电子邮件从Outlook导入Excel
我设法创建了一个宏,如果电子邮件主题是特定的字符串,它可以将电子邮件从Outlook导入Excel 不过,我还想添加一个条件,只导入两个日期之间收到的电子邮件,但我似乎找不到正确的方法 以下是我目前掌握的代码:从特定时间段将电子邮件从Outlook导入Excel,excel,vba,outlook,Excel,Vba,Outlook,我设法创建了一个宏,如果电子邮件主题是特定的字符串,它可以将电子邮件从Outlook导入Excel 不过,我还想添加一个条件,只导入两个日期之间收到的电子邮件,但我似乎找不到正确的方法 以下是我目前掌握的代码: For Each OutlookMail In IFolder.Items If OutlookMail.ReceivedTime >= Range("start_date").Value And OutlookMail.ReceivedTime <= Range("
For Each OutlookMail In IFolder.Items
If OutlookMail.ReceivedTime >= Range("start_date").Value And OutlookMail.ReceivedTime <= Range("end_date").Value Then
ar() = Split(OutlookMail.Body, ",")
If InStr(OutlookMail.Subject, "Exportation of purchase order") > 0 Then
For Each Item In ar
dbf.Range("A2").Offset(i, 0).Value = Split(Split(Item, ":")(0), "-")(0)
dbf.Range("A2").Offset(i, 0).Columns.AutoFit
i = i + 1
Next Item
End If
End If
Next OutlookMail
IFolder.Items中每个OutlookMail的
如果OutlookMail.ReceivedTime>=范围(“开始日期”).值和OutlookMail.ReceivedTime 0,则
对于ar中的每个项目
dbf.Range(“A2”)。偏移量(i,0)。值=拆分(拆分(项目),“:”(0),“-”(0)
dbf.范围(“A2”).偏移量(i,0).Columns.AutoFit
i=i+1
下一项
如果结束
如果结束
下一期展望邮件
现在,代码导入从“开始日期”到最后一封收到的电子邮件为止收到的所有电子邮件
我可能弄乱了顺序或类似的东西,但如果有人能帮我,我将不胜感激。您的
if
语句看起来不错,尽管我可以整天盯着代码看,忽略一些明显的错误。然而,我的第一个想法是,结束日期不是你想象的那样。请在For
循环之前添加以下代码:
Dim StartDate As Date
Dim EndDate As Date
StartDate = Range("start_date").Value
EndDate = Range("end_date").Value
Debug.Print "Date range is " & StartDate & " to " & EndDate
Debug.Assert False
执行将在
Debug.Assert False
处停止。日期范围是否如您所期望的那样?好吧,我决定尝试重新编写代码,同时对其进行适当的结构化,并最终使其按预期工作
我不知道将来是否有人会遇到和我一样的问题,所以我会发布新代码作为答案
Sub GetDataFromOutlook()
Dim OutlookApp As Outlook.Application
Dim OutlookNamespace As Outlook.Namespace
Dim IFolder As Outlook.MAPIFolder
Dim OutlookMail As Variant
Dim i As Integer
Dim wb As Workbook
Dim ws As Worksheet
Dim ar() As String
ReDim ar(0 To i)
Set OutlookApp = New Outlook.Application
Set OutlookNamespace = OutlookApp.GetNamespace("MAPI")
Set wb = ThisWorkbook
Set IFolder = OutlookNamespace.GetDefaultFolder(olFolderInbox).Folders("IMPORTADOS")
Set ws = wb.Sheets("Sheet1")
i = 0
Application.ScreenUpdating = False
For Each OutlookMail In IFolder.Items
If InStr(OutlookMail.Subject, "Exportation of purchase order") > 0 Then
If DateValue(OutlookMail.ReceivedTime) >= DateValue(Range("start_date")) And DateValue(OutlookMail.ReceivedTime) <= DateValue(Range("end_date")) Then
ar() = Split(OutlookMail.Body, ",")
For Each Item In ar
ws.Range("A2").Offset(i, 0).Value = Split(Split(Item, ":")(0), "-")(0)
ws.Range("A2").Offset(i, 0).Columns.AutoFit
i = i + 1
Next Item
End If
End If
Next OutlookMail
ws.Range("Table1[#All]").RemoveDuplicates Columns:=1, Header:=xlYes
ws.Columns("A:A").EntireColumn.AutoFit
Application.ScreenUpdating = True
Set IFolder = Nothing
Set OutlookNamespace = Nothing
Set OutlookApp = Nothing
End Sub
子GetDataFromOutlook()
Dim OutlookApp作为Outlook.Application
将Outlook命名空间设置为Outlook.Namespace
将IFolder设置为Outlook.Mapi文件夹
Dim OutlookMail作为变体
作为整数的Dim i
将wb设置为工作簿
将ws设置为工作表
Dim ar()作为字符串
重拨ar(0到i)
Set-OutlookApp=新建Outlook.Application
设置OutlookNamespace=OutlookApp.GetNamespace(“MAPI”)
设置wb=ThisWorkbook
设置IFolder=OutlookNamespace.GetDefaultFolder(olFolderInbox.Folders)(“IMPORTADOS”)
设置ws=wb.Sheets(“Sheet1”)
i=0
Application.ScreenUpdating=False
对于IFolder.Items中的每个OutlookMail
如果InStr(OutlookMail.Subject,“采购订单出口”)>0,则
如果DateValue(OutlookMail.ReceivedTime)>=DateValue(范围(“开始日期”)和DateValue(OutlookMail.ReceivedTime),我就设法让它工作。我正确地构造了代码,在重新编写代码时,我意识到ReceivedTime输出的是一个日期/时间值,而不仅仅是一个日期,这很可能是阻止我设置自ReceivedTime起的时间段与“开始日期”和“结束日期”根本不匹配的原因。谢谢你的时间和帮助。非常感谢你。日期、时间和日期+时间都是date
类型,可以毫无问题地进行比较。我不明白使用DateValue
有什么帮助。你试过我的密码了吗?EndDate
是您认为的吗?很抱歉耽搁了。老实说,我没有尝试你的代码。因为在调试过程中,我可以通过将鼠标悬停在“end_date”值上来查看它,所以我可以检查“end_date”值是否是在该范围内设置的值。我不知道为什么在我添加DateValue之前它不能正常工作,但现在它可以工作了。非常感谢你的帮助和时间。