我是Excel宏(VBA)的新手。 我们有一个Excel宏应用程序,我试图过滤其他邮件项目今天收到的Outlook邮件项目。我试过Restrict方法。 这是现在的代码
Set Fldr1 = olNs.GetDefaultFolder(olFolderInbox).Folders.Item("Folder name")
olMiArr=Fldr1.Items.Restrict("DateValue[ReceivedTime]='DateValue(Now)'")
但它会在执行时抛出错误。对此的任何评论都非常感谢。
答案 0 :(得分:0)
要确保日期格式为Microsoft Outlook所需,请使用格式化功能。例如:
Items.Restrict("DateValue[ReceivedTime]='" & Format(DateValue(Now),"ddddd h:nn AMPM") & "'")
还要注意Restrict方法将过滤器应用于Items集合,返回一个新集合,其中包含原始中与过滤器匹配的所有项目。
答案 1 :(得分:0)
首先,您的搜索条件包括内部字符串功能。
其次,你不应该在日期/时间属性中使用“=
”:由于舍入错误,永远不会满足条件,总是使用范围。
在你的情况下
olMiArr=Fldr1.Items.Restrict("[ReceivedTime] >= '" & DateValue(Now) & "' AND [ReceivedTime] < '" & DateValue(Now+1) & "'")
答案 2 :(得分:0)
还有另一种解决方案。搜索Outlook项目(无论是邮件项目,任务项目)时,请使用DASL语法。它看起来更复杂,实际上并非如此。
有一个名为Outlook Spy(http://www.dimastr.com/outspy/home.htm)的Outlook加载项,它为您提供DASL字符串。您可以选择要搜索其字段的项目,并获取项目内任何字段的“DASL”公式(常规字段或自定义字段)。
下面的用法示例,其中读取搜索关键字内的变量 (注意DASL字符串是随机的,它只是为了 描述,你必须在自己的Outlook项目上生成它):
像这样设置过滤后的项目的集合。并在其中循环。
myFilter="@SQL=""http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/somefieldname/0x0000001F""='" & strEnterInput & "'"
Set objSourceItemsRestrict = objSourceItems.Restrict(myFilter)
For Each objSourceTask In objSourceItemsRestrict
'do something
Next