如何返回控件引用?复选框引用返回报错求助
解决VBA返回复选框控件引用时的Error 91问题
我太懂这个VBA里的坑了——控件的默认属性真的很容易让人踩雷!你碰到的Run-time error '91',核心原因是你代码里的Me.ckExample默认返回的是复选框的Value属性(也就是True/False的布尔值),而不是控件对象本身,导致对象变量ck根本没被正确设置成控件引用,自然报“对象变量或With块变量未设置”的错误。
修复方案:明确获取控件对象引用
要拿到控件的对象引用,你需要通过Controls集合来访问,或者显式指定控件对象类型,避免触发默认属性的隐式调用。
最简修复示例(用户表单场景)
Function GetCheckBoxControl() As MSForms.CheckBox Dim ck As MSForms.CheckBox ' 通过Controls集合获取控件对象,而非默认的Value属性 Set ck = Me.Controls("ckExample") ' 将控件引用返回 Set GetCheckBoxControl = ck End Function
如果你用的是Access表单
只需要把对象类型改成Access.CheckBox即可:
Function GetCheckBoxControl() As Access.CheckBox Dim ck As Access.CheckBox Set ck = Me.Controls("ckExample") Set GetCheckBoxControl = ck End Function
为什么之前的写法会出错?
VBA里的很多控件都有默认属性,比如复选框的默认属性是Value,文本框是Text。当你直接写Me.ckExample时,VBA会自动帮你调用它的默认属性,相当于你写了Me.ckExample.Value——这是一个布尔值,不是控件对象。而你试图把这个布尔值赋值给对象变量ck,就会导致对象变量从未被设置为一个有效的控件对象,最终触发Error 91。
如果你想保留Me.ckExample的写法,也可以通过感叹号加控件名的方式(不过更推荐用Controls集合,可读性更强):
Set ck = Me!ckExample
这样就能确保你拿到的是控件对象本身,而不是它的值啦!
内容的提问来源于stack exchange,提问作者Myrddin Emrys
相关产品推荐
相关产品推荐

