如何使用VBA在MS Outlook中获取规则的文本值?

时间:2015-10-02 22:21:21

标签: vba outlook outlook-vba outlook-2010 outlook-2013

我正在尝试获取我在MS Outlook中设置的规则的条件的文本值。

我创建了一个名为“TestRule”的规则,其条件基于消息Body中的文本(它必须包含文本“zzz”)以及基于消息标题中的文本的条件(它必须具有文字“aaa”中的)。 (当然,此规则可能永远不会运行,这只是为了测试我是否可以读取规则中的条件。)规则和条件已启用。

以下是我正在使用的代码

Dim olRules As Outlook.Rules
Dim olRule As Outlook.Rule

Set olRules = Application.Session.DefaultStore.GetRules
Set olRule = olRules.Item("TestRule")

Debug.Print olRule.Conditions.Body.Text
Debug.Print olRule.Conditions.MessageHeader.Text

但是,两个debug.print行都会出现“Type mismatch”错误。

如何读取条件的当前值?

(我已经检查并仔细检查:一条名为“TestRule”的规则。)

2 个答案:

答案 0 :(得分:1)

GD DRC,

我已经为你的问题付出了更多努力,我想我已经弄清楚你为什么会遇到类型不匹配的问题。

您可能在“正文”条件以及“消息标题”条件中添加了一些关键字? 这些单独的条目将添加到数组中,即“olRule.Conditions.Body.Text”数组。

以下代码行;

Private Sub printArray(ByRef pArr As Variant)
    Dim readString As Variant

    If (IsArray(pArr)) Then             'check if the passed variable is an array

        For Each readString In pArr

            If TypeName(readString) = "String" Then 'check if the readString is a String variable
                Debug.Print readString
            End If

        Next

    End If

End Sub

本质上是要求'debug.print'mehtod打印一个数组,但它不知道如何做到这一点。因为它不了解要打印的阵列的哪个部分。 根据您创建的条目数量,每个条目的标识符必然需要一个标识符指向唯一的数组条目。

所以:

  • olRule.Conditions.Body.Text(0)将指向中的第一个条目 阵列。
  • olRule.Conditions.Body.Text(1)将指向第二个条目 在阵列中。

有几种方法可以解决您的编码问题:

  1. 在该行上设置断点:

    olRule.Conditions.Body.Text

  2. 因此执行在执行代码行之前就会停止。 打开“本地窗口”(通过视图|本地窗口)并打开olRule.Text,您将看到添加的数组条目。

    1. 修改您的代码,以便按以下方式阅读
    2. 主要子程序

      cat bigfile.txt | parallel --pipe --cat -k perl ./splitwords.pl words-en.txt {}
      

      printArray子程序

      cat bigfile.txt | parallel --pipe --fifo -k perl ./splitwords.pl words-en.txt {}
      

      你也可以在第一个子程序中集成第二个子程序,但更好的编码实践是在函数或单独的子程序中执行重复任务(然后你可以将它用于同一模块中的其他方法:-))

      相信这将为您提供解决方案!

      Goodluck!

答案 1 :(得分:0)

GD DRC,

您确定默认商店中存在名称“TestRule”的规则。

如果我执行上面的代码,我会得到完美的结果(虽然没有打印任何值,因为没有设置值。所以上面代码中的语法很好。

尝试添加:

Debug.Print TypeName(olRule)

如果实际设置了olRule,则立即窗口中的结果应为“规则”。

所以整体代码应该是:

Dim olRules As Outlook.Rules
Dim olRule As Outlook.Rule

Set olRules = Application.Session.DefaultStore.GetRules
Set olRule = olRules.Item("TestRule")

Debug.Print TypeName(olRule)
Debug.Print olRule.Conditions.Body.Text
Debug.Print olRule.Conditions.MessageHeader.Text

希望能引导你朝着正确的方向前进!

干杯!