Изменить видимость групповых заголовков отчета Microsoft Access - PullRequest
1 голос
/ 26 ноября 2011

Я использую Access 2010 для создания нескольких отчетов и не могу понять, как скрыть заголовок группы, если он пуст.

Представьте, что у меня есть такая таблица (нет. Я ничего не знаю об автомобилях, это всего лишь пример):

H1  | H2       | H3     | H4       | DATA1   | DATA2   | DATA3
car | chassis  | engine | pistons  | data_a1 | data_a2 | data_a3
car | chassis  | engine | pistons  | data_b1 | data_b2 | data_b3
car | chassis  | engine | pistons  | data_c1 | data_c2 | data_c3
car | chassis  | engine | cylinder | data_a1 | data_a2 | data_a3
car | chassis  | engine | cylinder | data_b1 | data_b2 | data_b3
car | interior |        | seats    | data_a1 | data_a2 | data_a3
car | interior |        | seats    | data_b1 | data_b2 | data_b3

У меня есть 3 заголовка группы столбцов H1, H2 и H3 в этом порядке. У меня проблема в том, что когда H3 не содержит текста (т.е. "" (я думаю, что access оценивает его как нулевой)) я хочу скрыть заголовок группы для H3 или, по крайней мере, сделать так, чтобы он не занимал место в отчете. В настоящее время, где H3 пусто, отчет все еще содержит пустую строку.

Я пробовал это и подобное в событиях рисования и / или печати GroupHeader3

If IsNull([H3]) Then
    Me.GroupHeader3.Height = 0
    Me.GroupHeader3.BackColor = vbRed
    Me.GroupHeader3.Visible = False
Else
    Me.GroupHeader3.Height = 5
    Me.GroupHeader3.BackColor = vbGreen
End If

Идея, похоже, работает, то есть, если я закомментирую строку Visible = False, я получу красный или зеленый фон в нужных местах, однако он полностью игнорирует параметр высоты. Если я добавляю Visible = False, он жалуется, что его нельзя добавить в событие on Paint.

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

Я немного новичок в vba, так что, может быть, я упускаю что-то очевидное, но на данный момент я не совсем уверен, как поступить, поэтому любая помощь будет высоко ценится.

EDIT Для наглядности:

Отчет составлен примерно так:

H1
    H2
          H3
               H4
                    DATA1       DATA2       DATA3

Таким образом, в приведенных выше примерах данные будут выглядеть так:

car
    chassis
              engine
                      pistons
                              data_a1    data_a2    data_a3
                              data_b1    data_b2    data_b3
                              data_c1    data_c2    data_c3
                      cylinder
                              data_a1    data_a2    data_a3
                              data_b1    data_b2    data_b3
    interior

                      seats
                              data_a1    data_a2    data_a3
                              data_b1    data_b2    data_b3

Это пустая строка (заголовок группы 3) между салоном и сиденьями, которых я хочу избежать. Спасибо

Ответы [ 2 ]

3 голосов
/ 26 ноября 2011

Вы показываете нам заголовки столбцов, а не заголовки групп. Какой смысл менять высоту H3, если другие заголовки все еще здесь? Вы не можете сэкономить место таким образом.

Возможно, вы хотите скрыть весь столбец H3, переместив столбцы справа от H3 влево на ширину H3. Нет простого способа сделать это. Вам нужно будет рассчитать позиции задействованных текстовых полей и меток и соответственно изменить их «левую» позицию в событии OnFormat.

EDIT:

Используйте параметр Cancel процедуры процедуры форматирования заголовков группы:

Private Sub GroupHeader0_Format(Cancel As Integer, FormatCount As Integer)
    Cancel = IsNull(Me!H0)
End Sub

Поскольку код VBA никогда не выполняется в режиме конструктора, вы увидите его эффект только в предварительном просмотре и при печати. ​​

0 голосов
/ 18 июля 2018

Это более старая запись, но Мистер. Сообщение Jacot-Descomes помогло мне найти условное форматирование заголовков в Access. Мне нужен другой заголовок после первой страницы.

Private Sub PageHeaderSection_Format(Cancel As Integer, FormatCount As Integer)
  Dim reportPageNumber As Integer
  Dim pageHeaderHeight As Double

  pageHeaderHeight = Me.PageHeaderSection.Height

  reportPageNumber = Me.Page
  Me.PageHeaderSection.Height = 0
  PageHeaderSection.Visible = False

  If reportPageNumber > 1 Then
    Me.PageHeaderSection.Visible = True
    Me.PageHeaderSection.Height = pageHeaderHeight
  End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...