我想处理收到的邮件。
我的代码有一个冗长的条件语句,用于确定每个收到的电子邮件所属的类别。
根据此条件语句的结果,代码应读取MailItem对象的相应属性。
我想使用CallByName函数来实现这一点。
x = CallByName(itm, PAN_Source, VbGet)例如,如果传入邮件有附件,则'PAN_Source‘将被赋予值"Attachments.Item(1).DisplayName“。我希望CallByName(itm,PAN_Source,VbGet)返回itm.Attachments.Item(1).DisplayName
代码只是在这个阶段停止执行。
发布于 2020-02-28 01:22:53
这是一个老问题,我知道,但为了正确起见:VBA的CallByName does not将字符串作为
“将对其执行函数的对象的名称。”
在某些地方,MSDN示例被扭曲为plainly wrong one。它必须是每个si的对象。因此,不是:
Call CallByName("itm", PAN_Source, VbGet)执行此操作:
Call CallByName(itm, "NameMethodThatUsesString_PAN_Source" , VbGet, PAN_Source)必须在可选的Args()中提供PAN_Source。
另外,如果它将某些东西作为函数(vbMethod)返回,则使用Variant接收它:
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是我们想要CallBack的对象,CallByNameArg0是一个变体(允许IsMissing(CallByNameArg0 ))
如果有人试图对标准模块执行CallByName,它将不起作用;相反,可以尝试使用Application.Run
发布于 2014-12-06 22:27:06
CallByName函数接受以下参数:
我会尝试使用以下代码:
Call CallByName("itm", PAN_Source, VbGet)
您可能会发现Getting Started with VBA in Outlook 2010文章很有帮助。
https://stackoverflow.com/questions/27331951
复制相似问题