2010-11-26 3 views
0

Ich verwende ein Stück Code, der die Hintergrundfarbe von Steuerelementen in einem Formular erfolgreich festlegt. Und ich verwende Ähnliche Bits von Code, um die Hintergrundfarbe der erforderlichen Felder zu setzen etc ..Problem mit Datenblattunterformularen, die Rekursion verwenden, um Steuerelementeigenschaften in Formular festzulegen

Public Sub colCtrlNorm(frm As Form) 

Dim setColour As String 
setColour = RGB(252, 252, 252) 
Dim ctl As Control 
For Each ctl In frm.Controls 
    With ctl 
     If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Or   ctl.ControlType = acListBox Then 
    ctl.BackColor = setColour 
    ElseIf ctl.ControlType = acSubform Then 
     colCtrlNorm frm(ctl.Name).Form 
    End If 
End With 
Next ctl 
Set ctl = Nothing 

End Sub 

Alles funktioniert gut und gut, außer auf einem Formular, das ein Unterformular enthält das Datenblatt verschachtelt ist.

Wenn die Fehler Trapping ich die folgende Fehlermeldung erhalten:

Error 2455: You entered an expression that has an invalid reference to the property Form/Report 

Ich schätze ich kann das Datenblatt Kontrollen Hintergrundfarbe ändern. Dieses Problem tritt nur bei verschachtelten Datenblättern auf. Irgendwelche Ideen, wie ich das vermeiden kann?

Vielen Dank im Voraus für jegliche Hilfe bei diesem Problem.

Prost Noel

+1

Ich rate hier (ich würde eine Antwort posten, wenn ich wusste, dass es korrekt war), aber ich denke, Sie sollten überprüfen, ob das Elternteil des Unterformular-Steuerelement in der Datenblattansicht ist, und überspringen Sie es wenn. Ein Datenblatt ist ein Formular, daher ist ein Unterdatenblatt ein Unterformular, aber eines, das das untergeordnete Element eines Formulars in der Datenblattansicht ist. –

+0

@David Yep, hat es funktioniert, indem Sie überprüfen, ob die Standardansicht als Datenblatt ist – noelmcg

Antwort

1

Überprüfen Sie, ob die Eltern sehen von Das Steuerelement des Unterformulars befindet sich in der Datenblattansicht und wird bei Bedarf übersprungen. Ein Datenblatt ist ein Formular, daher ist ein Unterdatenblatt ein Unterformular, aber eines, das das untergeordnete Element eines Formulars in der Datenblattansicht ist. Verwenden Sie die Eigenschaft .CurrentView des Unterformulars.

können Sie die benannten Konstanten verwenden, die Teil des acCurrentView Enum sind:

acCurViewDatasheet = 2 
    acCurViewDesign = 0 
    acCurViewFormBrowse = 1 
    acCurViewPivotChart = 4 
    acCurViewPivotTable = 3 
    acCurViewPreview = 5 

Offensichtlich einige von denen, gelten nicht für die Formen, sondern auf Berichte, aber sie werden immer noch funktionieren.

0

EDIT

Verstanden unter Verwendung der folgenden Arbeiten, die subforms wenn defauly Ansicht vermeidet, ist Datenblatt (2)

Public Sub colCtrlNorm(frm As Form) 

Dim setColour As String 
setColour = RGB(252, 252, 252) 
Dim ctl As Control 
For Each ctl In frm.Controls 
    With ctl 
     If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Or   ctl.ControlType = acListBox Then 
    ctl.BackColor = setColour 
     ElseIf ctl.ControlType = acSubform Then 
      If ctl.Form.DefaultView <> 2 Then 
       colCtrlNorm frm(ctl.Name).Form 
      End If 
     End If 
    End With 
Next ctl 
Set ctl = Nothing 

End Sub 
+1

Ich denke, Sie möchten CurrentView, nicht DefaultView überprüfen, da die gespeicherte Eigenschaft zur Laufzeit überschrieben werden kann. –

+0

Prost David, macht Sinn. – noelmcg

Verwandte Themen