Access VBA - отключить агрегацию при открытии формы / подформы

То, что я пытаюсь сделать, это то, что когда пользователь открывает форму (и форму, которая открывается по умолчанию), я хочу выполнить поиск по всем столбцам (элементам управления?) В форме, проверить, есть ли они в данный момент. установить агрегирование (сумма, количество и т. д.) со строкой "Итоги" в Access, и, если это так, установить их не агрегирование.

Причина этого заключается в том, что хранится несколько миллионов записей, поэтому, когда кто-то запрашивает его до 3-4 и включает Sum, затем закрывает его, когда следующий человек открывает его, он пытается суммировать миллионы чисел и замораживает, Форма отображает запрошенные результаты из таблицы, которая заполняется с помощью SQL (я думаю, если это предложение имеет смысл). Вот что у меня так далеко:

Private Sub Form_Load()
'this form_load is in the UserApxSub sub-form, for reference
Call De_Aggregate
End Sub

Private Sub De_Aggregate()
Dim frm As Form, con As Control

Set frm = Forms!UserAPX!UserApxSub.Form!

For Each con In frm.Controls
    If con.ControlType = acTextBox Then
        If con.Properties("AggregateType").Value <> -1 Then
            'crashes on following line
            con.Properties("AggregateType").Value = -1
        End If
    End If
Next con

End Sub

У меня не так много опыта в Access VBA (как правило, работа в Excel VBA), поэтому, пожалуйста, прости меня, если я полностью не в курсе. Команда con.Properties("AggregateType").Value = -1 не выдает ошибку, но Access просто сбой при прямом достижении этой линии специально.

Я попробовал несколько вариантов синтаксиса, но безуспешно, и я также попытался пройтись по другим элементам файла (tabledefs, querydefs, наборы записей и т. Д.), А также посмотреть, пытаюсь ли я изменить неверное значение, но элементы управления в этой подчиненной форме - единственные элементы во всем файле.mdb, которые появляются, когда я ищу элементы со свойством AggregateType.

Я выключил строку, что ошибки с Debug.Print con.Name & " - " & con.Properties("AggregateType").Value и я могу проверить, ничего не вернуть ничего, кроме -1, включить агрегацию в некотором столбце вручную, и заставить его вернуть правильный результат (например, 0 для суммы), так что я думаю, что я смотрю в нужном месте, просто отсутствует какой-то ключевой фактор.

Я работал над этим пару недель безуспешно. Буду очень признателен за любой способ исправить то, что у меня есть, или указать мне правильное направление!

1 ответ

Это не обязательно ответ, но у меня недостаточно репутации, чтобы дать "комментарий"...

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

Я бы посоветовал попытаться запустить вашу подпрограмму с помощью Form_Open или Form_Current, чтобы узнать, сбрасывается ли свойство после того, как ваш код был вызван по какой-то причине.

ОБНОВИТЬ:

Вы ссылаетесь на объект "Subform" вашей основной формы:

Set frm = Forms!UserAPX!UserApxSub.Form!

Попробуйте сослаться на фактический UserApxSub ФОРМА явно.

Что-то вроде Set frm = Forms!UserApxSub! (при условии, что UserApxSub - это имя формы)

затем придерживаться Form_Open вашей основной формы:

Private Sub Form_Open(Cancel As Integer)
'// the following would set a single control only. You can add your loop through all controls
Me!{your control name}.Properties("AggregateType").Value = -1 '// set control in your main form
Form_UserApxSub!{your control name}.Properties("AggregateType").Value = -1 '// set control in your "sub" form
End Sub
Другие вопросы по тегам