You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何返回控件引用?复选框引用返回报错求助

解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:48:49