VBA:使用类别限制方法的替代方法?

时间:2014-09-23 19:57:24

标签: vba outlook outlook-vba outlook-2010 outlook-2003

我的公司刚刚从outlook 2003迁移到2010年。我们有一个紫色标记消息的按钮,另一个通过使用标记过滤器将紫色标记的消息发送到服务器数据库。 [FlagStatus] = 2 由于outlook 2010不再使用旗帜颜色,我将代码更改为使用类别,我成功创建了一个新类别" readyToSend"紫色。问题是我无法使用此新类别过滤所有电子邮件。 微软似乎自相矛盾,我的代码也不起作用。我正在寻找替代方案。

来自Items.Restrict Method (Outlook)

  

此方法无法使用,并会导致以下错误   特性:   的分类

我明白了,但如果你向下滚动到示例,你会得到:

  

"此Visual Basic for Applications(VBA)示例使用Restrict   获取业务类别的所有收件箱项并将其移动到的方法   Business文件夹。要运行此示例,请创建或确保a   子文件夹名为' Business'存在于收件箱下。 "

Sub MoveItems()  
    Dim myNamespace As Outlook.NameSpace  
    Dim myFolder As Outlook.Folder  
    Dim myItems As Outlook.Items  
    Dim myRestrictItems As Outlook.Items  
    Dim myItem As Outlook.MailItem  

    Set myNamespace = Application.GetNamespace("MAPI")  
    Set myFolder = _  
        myNamespace.GetDefaultFolder(olFolderInbox)  
    Set myItems = myFolder.Items  
    Set myRestrictItems = myItems.Restrict("[Categories] = 'Business'")  
    For i =  myRestrictItems.Count To 1 Step -1  
        myRestrictItems(i).Move myFolder.Folders("Business")  
    Next  
End Sub

我无法使用此代码。 解决方案1:如果我能让这个工作,我可以解决我的问题。 解决方案2:找到另一种方法来标记要传输/转移的消息而不是类别

感谢您的帮助,如果需要,会发布代码

2 个答案:

答案 0 :(得分:0)

如果过滤器不起作用,我会以其他方式进行:

  • 选择所有项目(相当于已经过滤的项目)
  • 检查每个项目是否具有您要查找的类别

这看起来像这样:

Set myItems = myFolder.Items  
''=> this we leave away''Set myRestrictItems = myItems.Restrict("[Categories] = 'Business'")  
For i =  myItems.Count To 1 Step -1  
    if instr(myItems(i).Categories, "readyToSend") <> 0 then myItems(i).Move myFolder.Folders("Business")  
Next 

运行可能需要一点时间,但差异不应该是坏的。 我希望这有帮助, 最大

答案 1 :(得分:0)

迟到了答案,但我在MSDN blog

找到了一个有效的解决方案

需要在MFCMapi中挖掘一下才能获得正确的字符串。

对于约会项目,限制字符串是: &#34; @SQL =&#34;&#34; http://schemas.microsoft.com/mapi/string/ {00020329-0000-0000-C000-000000000046} /关键词&#34;&#34; =&#39;&#34; &安培; sCategoryName&amp; &#34;&#39;&#34;

您需要检查相同的字符串是否适用于消息或挖出正确的字符串。