如何在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
相关产品推荐
相关产品推荐

