Изменить видимость заголовков групп отчета Microsoft Access

Я использую 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 не содержит текста (т.е. "" (я думаю, что доступ оценивает это как нуль)) я хочу скрыть заголовок группы для H3 или, по крайней мере, сделать так, чтобы он не занимал места в отчете. В настоящее время там, где H3 пуст, отчет по-прежнему содержит пустую строку.

Я пробовал это и подобное в событиях Paint и/или Print 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, поэтому я могу упустить что-то очевидное, но на данный момент я не совсем уверен, как действовать, поэтому любая помощь будет высоко оценена.

РЕДАКТИРОВАТЬ Для ясности:

Отчет выглядит примерно так:

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) между салоном и сиденьями, которых я хочу избежать. Спасибо


person m3z    schedule 26.11.2011    source источник


Ответы (2)


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

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

ИЗМЕНИТЬ:

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

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

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

person Olivier Jacot-Descombes    schedule 26.11.2011
comment
Извините, я не думаю, что объяснил достаточно хорошо, я имею в виду, что таблица, которую я привел выше, является примером данных, которые я использую в качестве основы для отчета. Отчет сгруппирован по H1, затем H2, затем H3, и именно в отчете я хочу сэкономить место. Спасибо - person m3z; 26.11.2011
comment
Я привел лучший пример в вопрос - person m3z; 26.11.2011
comment
Спасибо, ваше редактирование работает просто отлично. Просто отметим для всех, кто может попробовать это, это работает только при предварительном просмотре и при печати. - person m3z; 27.11.2011
comment
Где еще он должен работать? Ваш код VBA никогда не запускается в режиме разработки. - person Olivier Jacot-Descombes; 01.12.2011
comment
Ах, но я этого не знал, поэтому я подумал, что разумно, что кто-то другой тоже не может. - person m3z; 02.12.2011

Это более старый пост, но Mr. Сообщение 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
person PhillipOReilly    schedule 17.07.2018