使用递归在表单中设置控件属性的数据表子表单的问题

时间:2010-11-26 15:41:11

标签: ms-access-2007 access-vba

我正在使用一段代码成功设置窗体上控件的背景颜色。我使用类似的代码来设置所需字段的背景颜色等。

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

除了包含具有嵌套数据表的子表单的表单外,所有内容都可以正常工作。

当捕获错误时,我收到以下错误消息:

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

我很感激我无法更改数据表控件背景颜色。此问题仅出现在嵌套数据表中。任何有关如何避免这种想法的想法?

提前感谢您对此问题的任何帮助。

干杯 诺尔

2 个答案:

答案 0 :(得分:1)

检查子窗体控件的父级是否在数据表视图中,如果是,则跳过它。数据表是一个表单,因此子数据表是一个子表单,但是在数据表视图中是表单的子表单。使用子表单的.CurrentView属性。

您可以使用属于acCurrentView枚举的命名常量:

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

显然,其中一些不适用于表格而是适用于报告,但它们仍然有效。

答案 1 :(得分:0)

修改

通过使用以下方法使其工作,如果有不正确的视图是数据表(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