我正在使用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)。 感谢
答案 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