Как ссылаться на непрерывную подчиненную форму - PullRequest
1 голос
/ 23 декабря 2010

У меня есть форма Access 2003 с одной подчиненной формой, настроенной на непрерывные формы, в элементе управления подчиненной формы.Для одной записи в основной форме от 1 до нескольких записей появятся в форме.Данные отображаются правильно.

Основная форма называется Виджеты , а подформа - Транзакции .Существует 5 элементов управления текстовым полем, которые отображают данные в подчиненной форме.Это вопрос ReceiptDate .

Что я хотел бы сделать, это посмотреть на значения и определить, была ли квитанция на 2009 год, и если это так, то измените фон этой строки на желтый, чтобы он выделялся, когда пользователь встречаетсостояние.Возможно, даже измените шрифт поля даты на жирный.

Я пробовал много способов ссылаться на элементы управления подчиненной формы.Когда я попробовал Me.Transactions.ReceiptDate, я получил только первую запись в этой подчиненной форме.Я хотел бы иметь возможность просмотреть их и посмотреть, выполнено ли условие.Я пробовал Me.Transactions.ReceiptDate(1) и Me.Transactions.ReceiptDate(0) и так далее.

Я тоже пробовал маршрут For Each ctl In Form.Controls.Это работало в течение нескольких итераций, и затем я получил ошибку времени выполнения 2455 «Вы ввели выражение, которое имеет недопустимую ссылку на свойство Форма / Отчет».

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

Есть ли способ ссылаться на определенные "строки" в подчиненной форме и что-то делать на основе найденного значения?Кроме того, я выполняю это в событии On Current, так как я не знаю, куда еще поместить код.Подчиненная форма загружается до родительской формы, так что возможно, что эти элементы управления даже не полностью «там», но затем я получаю дату первой строки, когда я пытаюсь это сделать в Immediate Window.:

С любезной помощью @Remou я могу отладить.печатать поля ReceiptDate из RecordSet.Это здорово, потому что теперь я могу оценивать данные и делать определенные вещи на основе значений. Код @ Remou помог мне поместить это в событие OnCurrent:

Dim i As Long
Dim frm As Form
Dim rs As DAO.Recordset

' Get the form and its recordset.
Set frm = Me.Form
Set rs = frm.RecordsetClone

' Move to the first record in the recordset.
rs.MoveFirst

' Move to the first selected record.
rs.Move frm.SelTop - 1

' Enumerate the list of selected records presenting the ReceiptDate field
For i = 1 To rs.RecordCount
    Debug.Print rs![ReceiptDate]
    rs.MoveNext
Next i

Так что теперь я могу знатьу какой строки в моей подчиненной форме есть квитанция от 2009 года, мне нужно иметь возможность выделить весь ряд или строки, когда я сталкиваюсь с ними в цикле for.Как я могу ссылаться на фактическую строку?Представление таблицы данных или представление непрерывных форм - я пробовал оба.

Условное форматирование прекрасно, но оно позволяет мне выделить только одну конкретную запись, и я бы предпочел сделать это через VBA, потому что ...... отсюда я хочу использоватьвозможность щелкнуть любую запись в подчиненной форме, получить детали квитанции и, возможно, распечатать их.

Есть идеи?

Ответы [ 3 ]

1 голос
/ 24 декабря 2010

Я наконец получил это. Frm.SelTop = x установит выбранную запись, и оттуда я могу установить фон или стиль шрифта и т. Д. Очень круто. Простой тест на 2009 год и установка выбранной записи:

Dim i As Long
Dim frm As Form
Dim rs As DAO.Recordset

' Get the form and its recordset.
Set frm = Me.Form
Set rs = frm.RecordsetClone

' Move to the first record in the recordset.
rs.MoveFirst

' Move to the first selected record.
rs.Move 0

' Enumerate the list of selected records presenting
' the CompanyName field in a message box.
For i = 1 To rs.RecordCount
    If Year(rs![ReceiptDate]) = 2009 Then
        frm.SelTop = i '<-----------------------------
    End If
    rs.MoveNext
Next i
1 голос
/ 12 октября 2013

Для того, чтобы я мог получить электронную почту от нижней части моей непрерывной формы, я использовал этот намного более простой код (поскольку я избегал кода RecordsetClone)

    Me.[email subform].Form.SelTop = Me.[email subform].Form.Count 'selects the last row
    str = Me.[email subform].Form.Email 'capture the value of the last row
    MsgBox str
1 голос
/ 23 декабря 2010

В этой ситуации лучше всего использовать условное форматирование.

Чтобы обратиться к элементу управления в подчиненной форме, обратитесь к элементу управления подчиненной формы по имени, затем к свойству формы, чтобы получить содержащуюся форму, затем к элементу управления по имени:

Me.MySubformControlName.Form.MyControl

См .: http://www.mvps.org/access/forms/frm0031.htm

...