VBA使用CallByName批量为多个类赋值时遭遇类型不匹配问题
解决CallByName使用Variant类型值时的类型不匹配问题
我最近在写一个通用函数,想给MobCollection集合里所有Mob类的某个变量统一设置指定值。用CallByName实现的时候碰到了个棘手的问题:当我的Value初始化为Variant类型时,第四个参数Args总会抛出类型不匹配的错误。
折腾了一番测试,还和同行讨论后,终于找到了解决方案——在CallByName语句里的Value外面加上括号,强制求值就能搞定这个问题。这个实用的小技巧要归功于Rory。
给大家举个代码示例对比:
原来触发错误的写法:
CallByName mobInstance, "TargetProperty", vbLet, Value
修改后正常运行的写法:
CallByName mobInstance, "TargetProperty", vbLet, (Value)
加括号的核心作用是把Variant类型的Value强制转换成它实际存储的具体类型,这样CallByName就能正确识别参数类型,自然不会再触发类型不匹配的错误了。
内容的提问来源于stack exchange,提问作者Leo Steeves
相关产品推荐
相关产品推荐

