CallByName的一些缺陷

CallByName 函数

执行一个对象的方法,或者设置或返回一个对象的属性。

语法

CallByName(object, procname, calltype,[args()])

CallByName 函数的语法有以下命名参数:

部分 描述
object 必需的;变体型(对象)。函数将要执行的对象的名称。
procname 必需的;变体型(字符串)。一个包含该对象的属性名称或者方法名称的字符串表达式。
calltype 必需的;常数。一个 vbCallType 类型的常数,代表正在被调用的过程的类型。
args() 可选的:变体型(数组)

说明

CallByName 函数用于获取或者设置一个属性,或者在运行时使用一个字符串名称来调用一个方法。

在下面的例子中,第一行使用 CallByName 来设置一个文本框的 MousePointer 属性,第二行得到 MousePointer 属性的值,第三行调用 Move 方法来移动文本框:

CallByName Text1, "MousePointer", vbLet, vbCrosshair
Result 
= CallByName (Text1, "MousePointer", vbGet)
CallByName Text1, "Move", vbMethod, 100100

上边是关于CallbyName函数的用法,但是如果进行如下试验,就会发现存在一些缺陷如下:

'系统提示错误
vba.Interaction.CallByName(activedocument,"Paragraphs.Count",VbGet )

'函数运行正常
vba.Interaction.CallByName(activedocument.Paragraphs,"Count",VbGet )

关键就在于ProcName不能是多级的属性,只能是最近的属性,为了解决这个问题,只能动点手脚了,自己处理ProcName部
分了,很是不爽。
但是CallbyName 确实是个好东西,用好了会收益不浅的。
使用Google搜索一下,有些文章不错的,记录一下:

1:根据对象名称来操作对象(非CallByName方法)
2:让数据来证明
3:后绑定方式下对Object的处理

原文地址:https://www.cnblogs.com/Duiker/p/224539.html