正如我的问题标题所示,如何循环遍历表单中的所有控件,包括子表单。
例如,我使用下面的子例程来设置带有标记*
的控件的背景颜色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
如何改变它以捕获子表单中的控件? 提前感谢任何帮助或指示。
干杯 诺尔
答案 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