Excel VBA:如何通过变量访问Dictionary中Person类的成员?
遍历错误数组动态访问Person类成员的实现方案
当然可以通过动态拼接成员名称的方式批量检查错误,不用为每个错误单独写重复逻辑。你现在的示例代码写法有问题——VBA里&是字符串连接符,没法直接通过person.error & theError这种方式访问类成员,得用CallByName函数来实现动态访问。
修正后的实现代码
假设你的Person类中定义了ErrorA、ErrorB、ErrorC这类对应错误标识的数值型/布尔型属性,代码可以这么写:
Dim errors As Variant errors = Array("A", "B", "C") Dim theError As Variant Dim person As Person For Each theError In errors ' 遍历字典里的Person对象,注意要访问Items集合 For Each person In people.Items ' 动态拼接成员名并获取属性值 If CallByName(person, "Error" & theError, VbGet) > 0 Then Debug.Print theError ' 输出触发的错误标识,比如A、B、C End If Next person Next theError
关键说明
CallByName函数:这是VBA实现动态访问对象成员的核心,参数分别是目标对象、要访问的成员名称字符串、操作类型(这里用VbGet表示获取属性值)。- 成员名匹配:要保证拼接后的字符串(比如
ErrorA)和Person类里实际的成员名称完全一致,要是你的属性叫ErrA,就改成"Err" & theError。 - 字典遍历注意:直接
For Each person In people遍历的是字典的键,必须用people.Items才能拿到存储的Person对象,避免类型不匹配报错。
内容的提问来源于stack exchange,提问作者TAS1987
相关产品推荐
相关产品推荐

