更改Microsoft Access报告的组标题的可见性

时间:2011-11-26 16:58:53

标签: ms-access vba onload ms-access-2010

我正在使用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

我按顺序有H1,H2和H3列的3个组头。我遇到的问题是,当H3不包含任何文本时(即“”(我认为访问评估为null))我想隐藏H3的组头,或者至少使它在报告中不占用空间。目前H3为空白的地方,报告仍然包含空白行。

我在GroupHeader3的Paint和/或Print事件

中试过这个和类似的事情
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置于其上,则会抱怨它无法放入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 个答案:

答案 0 :(得分:3)

您向我们展示了列标题而不是组标题。如果其他标题仍然存在,那么改变H3的高度有什么意义呢?你无法以这种方式节省空间。

可能你想通过将H3右边的列向左移动H3的宽度来隐藏整个列H3。没有简单的方法可以做到这一点。您必须计算所涉及的文本字段和标签的位置,并在OnFormat事件中相应地更改其“左”位置。

修改

使用组标题的Format事件过程的Cancel参数:

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

由于VBA代码永远不会在设计模式下运行,因此您只能在打印预览和打印时看到它的效果。

答案 1 :(得分:0)

这是一篇较旧的文章,但是Mr. Jacot-Descomes' post帮助我弄清楚了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