Access VBA:如何从另一个窗体获取复选框的值
解决跨窗体访问Access复选框值的问题
我来帮你排查这个问题,根据你描述的情况,代码没报错但不执行,大概率是以下几个原因之一,我们逐一解决:
1. 修正控件值的判断逻辑
你的跨窗体代码里,IsNull(ctl)判断的是控件对象本身是否存在,而不是控件的Value是否为Null。这会导致第一个条件永远成立(只要控件存在),但如果复选框的默认值是Null且未被修改,或者你误判了值的状态,就会跳过执行。
把代码改成直接判断控件的Value属性:
Dim frm As Form, ctl As Control Set frm = Forms!Relevant_Application Set ctl = frm!Check43 ' 先判断控件的值是否不为Null,再判断是否为True If Not IsNull(ctl.Value) Then If ctl.Value = True Then DoCmd.OpenQuery "Insert_Query" End If End If
或者更简洁的写法(因为Access里复选框的Value为True时直接判断即可,Null会被视为False):
Dim frm As Form Set frm = Forms!Relevant_Application If frm!Check43.Value = True Then DoCmd.OpenQuery "Insert_Query" End If
2. 确认窗体名称的正确性
确保Forms!Relevant_Application中的Relevant_Application是窗体对象的实际名称,而不是窗体标题栏显示的文字。你可以在导航窗格中查看窗体的名称,或者在窗体设计视图的属性窗口里查看“名称”属性(不是“标题”属性)。
如果名称带空格或特殊字符,需要用方括号包裹:
Set frm = Forms![Relevant Application]
3. 检查窗体的实例状态
如果你打开了多个Relevant_Application窗体实例,Forms!Relevant_Application只会指向第一个打开的实例。如果你操作的是后续打开的实例,代码访问的就是错误的复选框值。
这种情况下,你需要确保访问的是当前活跃的窗体实例,或者通过打开窗体时的返回值来引用:
比如打开窗体时保存实例:
' 在打开窗体的代码中 Dim targetFrm As Form Set targetFrm = DoCmd.OpenForm("Relevant_Application", acNormal) ' 之后访问这个实例的复选框 If targetFrm!Check43.Value = True Then DoCmd.OpenQuery "Insert_Query" End If
4. 确保窗体处于打开状态
虽然你说代码没报错,但如果窗体是隐藏的或者未打开,Forms!Relevant_Application会抛出错误。如果没报错说明窗体是打开的,但可以加个判断确保:
If CurrentProject.AllForms("Relevant_Application").IsLoaded Then Dim frm As Form Set frm = Forms!Relevant_Application If frm!Check43.Value = True Then DoCmd.OpenQuery "Insert_Query" End If Else MsgBox "目标窗体未打开!" End If
试一下上面的方案,应该能解决你的问题~
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

