我正在使用一段代码成功设置窗体上控件的背景颜色。我使用类似的代码来设置所需字段的背景颜色等。
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
我很感激我无法更改数据表控件背景颜色。此问题仅出现在嵌套数据表中。任何有关如何避免这种想法的想法?
提前感谢您对此问题的任何帮助。
干杯 诺尔
答案 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