Vba CallByName语法

Vba CallByName语法,vba,outlook,callbyname,Vba,Outlook,Callbyname,我想处理收到的邮件 我的代码有一个很长的条件语句,用于确定每个传入电子邮件所属的类别 根据此条件语句的结果,代码应该读取MailItem对象的适当属性 我想用CallByName函数来实现这一点 x = CallByName(itm, PAN_Source, VbGet) 其中“itm”是MailItem对象,“PAN_Source”变量包含字符串,该字符串引用“itm”中的特定属性 例如,如果传入邮件有附件,则“PAN_Source”的值为“Attachments.Item(1).Displ

我想处理收到的邮件

我的代码有一个很长的条件语句,用于确定每个传入电子邮件所属的类别

根据此条件语句的结果,代码应该读取MailItem对象的适当属性

我想用CallByName函数来实现这一点

x = CallByName(itm, PAN_Source, VbGet)
其中“itm”是MailItem对象,“PAN_Source”变量包含字符串,该字符串引用“itm”中的特定属性

例如,如果传入邮件有附件,则“PAN_Source”的值为“Attachments.Item(1).DisplayName”。我希望CallByName(itm、PAN_Source、VbGet)返回itm.Attachments.Item(1).DisplayName

代码在此阶段停止执行。

函数接受以下参数:

  • 将在其上执行函数的对象的名称
  • 包含对象的属性或方法名称的字符串表达式
  • vbCallType类型的常量,表示正在调用的过程的类型
  • 参数(可选)
我会尝试使用以下方法:

调用CallByName(“itm”,PAN_Source,VbGet)


你可能会发现这篇文章很有帮助

我知道这是个老问题,但为了正确起见: VBA的CallByName接受字符串作为

“将在其上执行函数的对象的名称。”

在某些地方,MSDN示例被歪曲成了一个简单的例子。 它必须是每个si的对象。 因此,不是:

Call CallByName("itm", PAN_Source, VbGet)
这样做:

Call CallByName(itm, "NameMethodThatUsesString_PAN_Source" , VbGet, PAN_Source)
必须在可选参数()处提供PAN_源

作为奖励,如果它以函数(vbMethod)的形式返回某些内容,请使用变量接收:

auxVar = CallByName (itm, "NameMethodThatUsesString_PAN_Source" , VbGet, PAN_Source)
我主要使用它来迭代一些集合以获得SortIt()或检索值- 或两者兼有-通过属性Get或Set,在排序算法中,例如:

 ...

        If IsMissing(CallByNameArg0) Then
            If VarType(CallByName(this, SortPropertyName, VbGet)) = vbObject Then
                Set thisValue = CallByName(this, SortPropertyName, VbGet)
            Else
                thisValue = CallByName(this, SortPropertyName, VbGet)
            End If
        Else
            If VarType(CallByName(this, SortPropertyName, VbGet)) = vbObject Then
                Set thisValue = CallByName(this, SortPropertyName, VbGet, CallByNameArg0)
            Else
                thisValue = CallByName(this, SortPropertyName, VbGet, CallByNameArg0)
            End If
        End If
 ...
其中,
this
是我们要回调的对象,
CallByNameArg0
是一个变量(允许
IsMissing(CallByNameArg0)


若有人试图对标准模块调用ByName,它将不起作用;相反,试试看,它不起作用。给出一个类型不匹配错误。如果特别要求提供对象,而不是对象的名称。对于第二个参数,请尝试传递一个表示简单对象属性的字符串,该字符串不带多个点。例如,传递财产的名称。我认为我正确地回答了您的问题;如果确实如此,请注明答案。