【发布时间】:2021-07-15 16:16:53
【问题描述】:
我有一些编码可以将存储的电子邮件的几个文件夹导入 Excel,它可以按预期工作。但是编码会从文件夹中带回所有存储的电子邮件,我希望它只返回上个月的电子邮件。我有一些公式是动态的,会自动更新前几个月的开始和结束日期,我知道我需要在编码中引用这些范围。
我如何将日期标准添加到下面的编码中(如果可能的话)?
TIA
Sub test()
Dim olApp As Outlook.Application
Dim olNS As Outlook.Namespace
Dim olFldr As Outlook.MAPIFolder
Dim olItem As Object
Dim olMailItem As Outlook.MailItem
Dim ws As Worksheet
Dim iRow As Long
Dim hdr As Variant
Dim iFldr As Long
Set ws = ThisWorkbook.Worksheets("EmailImport")
Set olApp = New Outlook.Application
Set olNS = olApp.GetNamespace("MAPI")
With ws
iRow = .Cells(.Rows.Count, "A").End(xlUp).Row
End With
Application.ScreenUpdating = False
For iFldr = 1 To 18
Select Case iFldr
Case 1
Set olFldr = olNS.Folders("test1").Folders("test1").Folders("test1")
Set olFldr = olFldr.Folders("test1a")
Case 2
Set olFldr = olNS.Folders("test1").Folders("test1").Folders("test1")
Set olFldr = olFldr.Folders("test1b")
Case Else
End Select
For Each olItem In olFldr.Items
If olItem.Class = olMail Then
Set olMailItem = olItem
With olMailItem
iRow = iRow + 1
If Not .Sender Is Nothing Then ws.Cells(iRow, "A") = .Sender
ws.Cells(iRow, "B") = .SenderEmailAddress
ws.Cells(iRow, "C") = .SenderName
ws.Cells(iRow, "D") = .Subject
ws.Cells(iRow, "E") = .ReceivedTime
ws.Cells(iRow, "F") = .Categories
ws.Cells(iRow, "G") = .TaskCompletedDate
ws.Cells(iRow, "H") = olFldr.Name
End With
End If
Next olItem
Next iFldr
With ws
hdr = Array("Sender", "SenderEmailAddress", "SenderName", "Subject", "ReceivedTime", "Categories", "TaskCompletedDate", "Folder")
.Range("A1").Resize(, UBound(hdr)) = hdr
.Columns.AutoFit
End With
End Sub
【问题讨论】:
-
您已经说过日期范围是动态更新的,您想从哪里获取代码的日期?它可以来自您工作表上的某些日期值吗?用户是否需要将其输入到输入框中?您的问题有很多答案,但您需要告诉我们您正在尝试做什么,但它如何不起作用。
-
是的 - 我已经定义了范围 Range("BOMD") 和 Range("EOMD") - 这些是公式驱动的单元格,分别计算当月的第一天和最后一天。谢谢
标签: vba date if-statement import outlook