如何遍历表单中的所有控件,包括子窗体中的控件 - Access 2007

时间:2010-07-27 14:28:20

标签: ms-access ms-access-2007

正如我的问题标题所示,如何循环遍历表单中的所有控件,包括子表单。

例如,我使用下面的子例程来设置带有标记*

的控件的背景颜色
Public Sub colCtrlReq(frm As Form)
'  Sets background color for required field -> Tag = *
Dim setColour As String
setColour = RGB(255, 244, 164)
Dim ctl As Control
For Each ctl In frm.Controls
        If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Or ctl.ControlType = acListBox Then
            If InStr(1, ctl.Tag, "*") <> 0 Then
                ctl.BackColor = setColour
            End If
        End If
Next ctl
Set ctl = Nothing
End Sub

如何改变它以捕获子表单中的控件? 提前感谢任何帮助或指示。

干杯 诺尔

2 个答案:

答案 0 :(得分:14)

您可以使用递归

Public Sub colCtrlReq(frm As Form)
''  Sets background color for required field -> Tag = *
Dim setColour As String
setColour = RGB(255, 244, 164)
Dim ctl As Control
For Each ctl In frm
        If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox _
            Or ctl.ControlType = acListBox Then
            If InStr(1, ctl.Tag, "*") <> 0 Then
                ctl.BackColor = setColour
            End If
        ElseIf ctl.ControlType = acSubform Then
            colCtrlReq frm(ctl.Name).Form

        End If
Next ctl
Set ctl = Nothing
End Sub

答案 1 :(得分:2)

访问子窗体控件的Form属性的控件集合。

请注意,子窗体控件的名称可能与保存的窗体对象的名称不同。

如果您的子表单 control 名为SubformControlName,请从此处开始:

For Each ctl In frm!SubformControlName.Form.Controls
    Debug.Print ctl.Name
Next

更新:根据您的评论,这是我认为您正在寻找的内容。

如果您事先不知道子窗体控件的名称,则可以在运行时识别窗体控件中的哪个控件是子窗体控件。

For Each ctl In frm.Controls
    If TypeName(ctl) = "SubForm" Then
        Debug.Print ctl.Name & " is a SubForm"
        For Each ctlSub in ctl.Form.Controls
            Debug.Print ctlSub.Name
        Next 
    End If
Next