Как перерисовать и изменить размер элемента подчиненного отчета в MS Access VBA - PullRequest
0 голосов
/ 03 июля 2018

У меня есть родительский отчет с именем rptClientCareAll. Он состоит из 3 элементов подчиненного отчета. У пользователя есть возможность скрыть детали одного из вложенных отчетов (если это актуально, это код, используемый для скрытия сведений вложенного отчета: me.detail.visible = false).

Проблема № 1: Когда я открываю вложенный отчет независимо от родительского отчета (иногда отчет будет отображаться как независимый отчет, а иногда как вложенный отчет, поэтому мне нужно, чтобы он работал в обеих ситуациях), детали скрыты , но отчет не «перекрашивается», поэтому отчет выглядит беспорядочно, поскольку нижний колонтитул теперь отображается прямо под заголовком, но детали не «стираются» с экрана. Как я могу «перекрасить» отчет так, чтобы детали были удалены? Можно перекрасить формы, но я не могу перекрасить отчет.

Проблема № 2: Когда я открываю родительский отчет и затем решаю скрыть детали в подотчете, детали правильно скрываются и «стираются» (в отличие от задачи № 1 выше; странно!), Но подотчет не сжимается в размере, поэтому весь смысл сокрытия деталей теряется, потому что в родительском отчете есть огромный промежуток пустого пространства, где раньше отображалась деталь подотчета. Как можно уменьшить подотчет, когда детали скрыты? Я попытался установить подробные разделы всех отчетов (как родительских, так и вложенных) в свойствах «Может расти» и «Может уменьшаться» в «Да», но это не помогает.

Примечание. Я показываю отчеты в acReportView, а не в acViewPreview. Кажется, что это может иметь значение для того, какие события запускаются?

Ответы [ 2 ]

0 голосов
/ 23 марта 2019

Используйте следующий код при событии ON LOAD:

Private Sub Form_Load()
Dim C As Control    

For Each C In Me.Form

    If TypeOf C Is TextBox Then

            If IsNull(C) Or C = "" Or C = 0 Or C = "0" Then
                C.Visible = False
                C.Height = 0
            Else
                C.Visible = True
            End If
    End If
Next C

Me.Requery

End Sub
0 голосов
/ 05 июля 2018

Итак, в основном проблема № 1 (отчет открывается независимо, , а не как подотчет) решается простым Me.Requery после того, как пользователь решает скрыть подробный раздел.

Проблема № 2, по-видимому, не может быть решена без закрытия и перезагрузки отчета, что было немного проще сказать, чем сделать в моем случае.

Для моей ситуации я добавил код для следующего:

  1. Когда пользователь щелкает, чтобы переключить детализацию подотчета на скрытый / видимый, (a) установите флаг глобальной переменной (логический тип), чтобы указать, является ли секция подробностей скрытой (false) и видимой (true), (б) установить другую глобальную переменную, чтобы указать, что отчет необходимо открыть заново, и (в) закрыть отчет.
  2. В моем случае в событии Close родительского отчета мне пришлось открывать форму при закрытии отчета, потому что мне требовалась форма для повторного открытия отчета (если была установлена ​​глобальная переменная для повторного открытия отчета). Правда), как только он был закрыт, потому что я не мог найти способ закрыть и заново открыть отчет изнутри себя. В форме я установил событие таймера для запуска после 333 мс (TimerInterval = 333), которое повторно открывает отчет и закрывает саму форму. (Когда я пытался повторно открыть отчет в событии Open формы, отчет фактически никогда не открывался, поэтому я добавил таймер, чтобы задерживать события достаточно долго, чтобы позволить отчету полностью закрыться, прежде чем пытаться открыть его снова.) ( Конечно, если глобальная переменная для повторного открытия отчета - False, то форма просто закрывается.)
  3. В подотчете, раздел сведений которого переключается между скрытым / видимым, в событии Open используйте Me.Detail.Visible = {globalvariableflag} и задайте глобальную переменную для перезагрузки отчета в значение False (поскольку отчет теперь перезагружен) .

Это неуклюже, но это был единственный способ, которым я смог найти способ скрыть и уменьшить секцию деталей по требованию.

...