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

如何在Access全局函数中正确引用子窗体的控件?

Access子窗体控件正确引用语法

你的问题出在子窗体的引用逻辑上,正确的语法需要先定位主窗体上的子窗体控件,再通过其Form属性访问子窗体对象,最后遍历控件集合。

错误原因

你写的Forms(tempParentFormName).Form(funFormName).Controls是错误的,因为funFormName是主窗体上的子窗体控件名称,而非直接通过主窗体的Form属性调用。子窗体是作为控件存在于主窗体的Controls集合中的,必须先获取这个子窗体控件,再访问它的Form属性才能拿到子窗体对象。

正确修改后的代码

Public Function funDeleteGetFieldValues(funFormName As String, _
                                        tempFieldsValues1 As String, _
                                        tempFieldsValues2 As String, _
                                        Optional tempParentFormName As String)
    Dim ctl As Control, tempProperControl As Boolean, tempCounter As Integer
    Dim targetForm As Form ' 新增变量统一存储目标窗体对象
    
    tempCounter = 1
    tempFieldsValues1 = ""
    tempFieldsValues2 = ""
    
    ' 根据是否传入父窗体名称,判断目标窗体类型
    If tempParentFormName = "" Then
        ' 无父窗体参数,直接引用主窗体
        Set targetForm = Forms(funFormName)
    Else
        ' 有父窗体参数,引用主窗体上子窗体控件对应的Form对象
        Set targetForm = Forms(tempParentFormName).Controls(funFormName).Form
    End If
    
    ' 遍历目标窗体的控件集合
    For Each ctl In targetForm.Controls
        ' 你的原有业务代码
    Next ctl
    
    Set ctl = Nothing
    Set targetForm = Nothing ' 释放对象,避免内存泄漏
End Function

关键注意点

  • 当传入tempParentFormName时,funFormName对应的是主窗体上的子窗体控件名称,而非子窗体本身的名称(注意区分控件名和窗体名,两者可能相同也可能不同)。
  • 用targetForm变量统一处理主窗体和子窗体的情况,让代码逻辑更清晰,也便于后续维护。

内容的提问来源于stack exchange,提问作者Linger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:24:15