Проблема с подчиненными формами таблицы с использованием рекурсии для установки свойств элемента управления в форме - PullRequest
0 голосов
/ 26 ноября 2010

Я использую фрагмент кода, который успешно устанавливает цвет фона элементов управления в форме. И я использую похожие кусочки кода, чтобы установить цвет фона обязательных полей и т. Д.

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

Я ценю, что не могу изменить цвет фона элемента управления таблицы данных. Эта проблема возникает только с вложенными таблицами данных. У кого-нибудь есть идеи относительно того, как я могу избежать этого?

Заранее благодарим за любую помощь в решении этой проблемы.

Приветствие Noel

Ответы [ 2 ]

1 голос
/ 28 ноября 2010

Проверьте, находится ли родительский элемент управления подчиненной формы в виде таблицы, и пропустите его, если это так.Таблица данных - это форма, поэтому под таблицей данных является подчиненная форма, но та, которая является дочерней по отношению к форме в представлении таблицы.Используйте свойство подчиненной формы .CurrentView.

Вы можете использовать именованные константы, которые являются частью перечисления acCurrentView:

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

Очевидно, что некоторые из них применяются не к формам, а к отчетам, но они все равно будут работать.

0 голосов
/ 27 ноября 2010

EDIT

Получил работу, используя следующее, что позволяет избежать подчиненных форм, если существует неправильное представление таблицы данных (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
...