Vba CallByName语法
我想处理收到的邮件 我的代码有一个很长的条件语句,用于确定每个传入电子邮件所属的类别 根据此条件语句的结果,代码应该读取MailItem对象的适当属性 我想用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
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,它将不起作用;相反,试试看,它不起作用。给出一个类型不匹配错误。如果特别要求提供对象,而不是对象的名称。对于第二个参数,请尝试传递一个表示简单对象属性的字符串,该字符串不带多个点。例如,传递财产的名称。我认为我正确地回答了您的问题;如果确实如此,请注明答案。