Excel VBA编译错误‘Method or Data Member not found’原因咨询
VBA编译错误“Method or Data Member not found”原因及解决办法
核心原因
你遇到的问题本质是对象类型的差异:
ThisWorkbook.Worksheets("Deformata")实际调用的是该工作表对应的专属代码类实例(即VBE里和工作表同名的模块,比如你工作表的(Name)属性为Deformata,这个类就叫Deformata),这个类继承了标准Worksheet的所有属性方法,同时额外把工作表上的控件(比如CheckBox2)作为成员添加了进去。- 而你声明的
Dim wDef As Worksheet是通用的Worksheet接口对象,它只包含VBA定义的标准工作表属性和方法,并不包含你这个工作表上自定义的CheckBox2成员,所以编译时会提示找不到该成员。
解决办法
有两种常用方案:
方案1:声明变量为工作表的专属代码类类型
直接把变量类型改成你工作表对应的代码类名称(在VBE里选中工作表,查看属性窗口的(Name)项即可获取):
Dim wDef As Deformata ' 这里的Deformata要和你工作表的(Name)属性一致 Set wDef = ThisWorkbook.Worksheets("Deformata") wDef.CheckBox2.Value = True ' 现在可以正常调用
方案2:通过控件集合间接访问
如果不想依赖专属代码类,也可以通过工作表的OLEObjects或Shapes集合访问控件:
- 若
CheckBox2是ActiveX控件:
wDef.OLEObjects("CheckBox2").Object.Value = True
- 若
CheckBox2是表单控件:
wDef.Shapes("CheckBox2").ControlFormat.Value = xlOn ' xlOn代表选中,xlOff代表未选中
补充说明
你觉得ThisWorkbook.Worksheets("Deformata")和wDef是同一个对象,这个认知没错——它们指向的是同一个工作表实例,但变量的类型决定了能访问的成员范围:通用Worksheet类型只能看到标准接口,而专属代码类类型能看到扩展的控件成员。
内容的提问来源于stack exchange,提问作者Guille
相关产品推荐
相关产品推荐

