Я сталкивался с этим раньше. Ранее я обнаружил упоминания об этом на нескольких разных форумах Access VBA после поиска в Google, но теперь не могу найти ни одного из этих обращений.
Я возился с этим часами сегодня. Я пробовал разные биты кода в различных событиях, но, как известно любому из нас, столкнувшись с этой проблемой, Report View
имеет значительно меньше триггеров событий, чем Print Preview
. Тем не менее, я нашел обходной путь и пару важных открытий в отношении этой раздражающей ошибки:
-
TextBox
не нужно получать фокус; простого доступа к свойству .Value
достаточно, чтобы дать ему толчок в штанах, которые необходимы для правильного отображения его содержимого. Таким образом, метод .SetFocus
не является необходимым.
- Для этого достаточно события
Section_Paint
.
Следующий фрагмент кода работал для меня. Конечно, измените имена разделов и элементов управления так, чтобы они совпадали с именами в вашем собственном отчете.
Справедливое предупреждение: это вызывает мерцание экрана в моей системе при прокрутке отчета. Я пытался отключить обновления экрана с помощью Application.Echo
, но это только усиливало мерцание. Казалось, что каждая строка кода, добавленная к событию, независимо от того, что это было, усиливала мерцание; похоже, проблема с синхронизацией:
Private Sub GrpGlacctFooter_Paint()
Dim DummyVar As Variant
'DummyVar can be reused for each control. We just need somewhere (anywhere) to
'stuff each .Value. Simply accessing .Value in any way is enough to trigger the
'TextBoxes to display their contents.
DummyVar = txtAcctSubtotalMessage.Value
DummyVar = txtAcctTotalSpent.Value
DummyVar = txtAcctRemainder.Value
End Sub