Как заголовок моего вопроса предлагают, как возможно циклично выполниться посредством всех средств управления в форме, включая подчиненные формы.
Например, я использую ниже sub стандартной программы для выбирания цвета фона средств управления с тегом *
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
Как изменил бы это для ловли средств управления в подчиненной форме? Заранее спасибо за любую справку или указатели.
Рождество аплодисментов
Вы можете использовать рекурсию
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
Получите доступ к коллекции элементов управления свойства 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