VBA如何在Locals本地窗口查看实现接口的类成员属性值
问题原因
你现在遇到的Locals窗口报错,本质是两个原因叠加导致的:
- 你测试代码中
myTestClass的声明类型是接口IMyClass,VBA调试器默认不会主动解析接口类型背后的实例成员 - 你类中对
IMyClass的实现方法都是Private修饰的,调试器无法直接读取私有成员展示到Locals窗口
可行解决方法
方案1:临时调试切换变量声明类型(对业务代码无侵入)
调试阶段将测试代码中的变量声明改为具体类类型,调试完成后改回接口类型即可:
Public Sub test() ' 调试时用这个声明,Locals直接展示所有成员 Dim myTestClass As clsMyClass ' 正式运行改回 Dim myTestClass As IMyClass Set myTestClass = MyClassFactory.Create(1, "Some Name") End Sub
这个方案不需要修改任何类、接口、工厂的代码,只需要临时改测试代码的声明类型,调试完还原即可。
方案2:给类添加公共属性暴露(一劳永逸)
在clsMyClass中添加对应属性的公共Get方法,不需要修改原有接口实现逻辑:
' 放在clsMyClass的代码中即可 Public Property Get MyID() As Long MyID = This.MyID End Property Public Property Get MyName() As String MyName = This.MyName End Property
添加后不管变量是用接口还是具体类类型声明,Locals窗口都可以正常读取公共属性展示数值,不影响原有接口的逻辑和使用。
方案3:手动展开实例节点(零代码修改)
不需要改任何代码,断点停住后在Locals窗口找到myTestClass节点,点击展开后找到里面的Object子节点,再次展开就能看到类的所有实例成员,这个方案适合不想改任何代码的临时调试场景,缺点是部分VBA版本偶尔会出现读取失败的情况。
内容的提问来源于stack exchange,提问作者Blau
相关产品推荐
相关产品推荐

