11 Stimmen

Schleifenbildung durch alle Steuerelemente in einem Formular, einschließlich der Steuerelemente in einem Unterformular - Access 2007

Wie der Titel meiner Frage andeutet, wie ist es möglich, Schleife durch alle Steuerelemente in einem Formular, einschließlich Unterformulare.

Ich verwende zum Beispiel die folgende Unterroutine, um die Hintergrundfarbe von Steuerelementen mit dem Tag * einzustellen

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

Wie würde dies ändern, um die Steuerelemente in einem Unterformular zu erfassen? Vielen Dank im Voraus für jede Hilfe oder Hinweise.

Prost Noel

16voto

Fionnuala Punkte 89346

Sie können Rekursion verwenden

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

2voto

HansUp Punkte 93765

Zugriff auf die Sammlung controls der Eigenschaft Form des Unterformular-Steuerelements.

Beachten Sie, dass der Name des Unterformular-Steuerelements möglicherweise nicht mit dem Namen des gespeicherten Formularobjekts übereinstimmt.

Wenn Ihr Unterformular Kontrolle SubformControlName genannt wird, beginnen Sie hier:

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

Update : Ihrem Kommentar entnehme ich, dass Sie Folgendes suchen.

Wenn Sie die Namen Ihrer Unterformular-Steuerelemente nicht im Voraus kennen, können Sie zur Laufzeit feststellen, welche Steuerelemente Ihres Formulars Unterformular-Steuerelemente sind.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X