如何在Access 2003报表中动态定位文本框?

时间:2013-05-23 18:22:21

标签: vba ms-access access-vba ms-access-2003 adp

我有一个Access 2003项目(.ADP),它是SQL Server 2005数据库的前端。

在这个ADP中,我有一个报告,它是一组8个未绑定的文本框,彼此堆叠在一起,每个文本框都有自己的标签。每个文本框都是针对8个不同部门的说明,这些部门将处理订单。

此报告将填充适当的数据,并在单击表单中的按钮时显示给用户。

很少有8个盒子同时获得值。大多数情况下,它有2或3个有价值的盒子。

鉴于此,是否有可能以某种方式实现盒子的流畅布局?即,隐藏没有要显示的值的框,但报告不应显示空白区域,而应向上移动包含隐藏框下方指令的框。

是否可以通过一些迂回的VBA代码?如果没有,我还可以尝试其他选择吗?谢谢。

编辑 - 报告和文本框仅用于显示数据。

1 个答案:

答案 0 :(得分:1)

我能够通过将文本框的“Can Shrink”属性设置为“Yes”,然后将以下代码添加到Detail band的On Format事件中来创建您描述的效果

Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)
Me.lblAccounting.Visible = Not IsNull(Me.txtAccounting.Value)
Me.txtAccounting.Visible = Not IsNull(Me.txtAccounting.Value)
Me.lblFinance.Visible = Not IsNull(Me.txtFinance.Value)
Me.txtFinance.Visible = Not IsNull(Me.txtFinance.Value)
Me.lblMarketing.Visible = Not IsNull(Me.txtMarketing.Value)
Me.txtMarketing.Visible = Not IsNull(Me.txtMarketing.Value)
Me.lblOperations.Visible = Not IsNull(Me.txtOperations.Value)
Me.txtOperations.Visible = Not IsNull(Me.txtOperations.Value)
End Sub

对于测试数据

ID  Accounting  Finance  Marketing  Operations
--  ----------  -------  ---------  ----------
 1  a1          f1                  o1        
 2              f2       m2                   

我在打印预览中获得以下结果。我正在使用Access 2010,On Format调整显然不适用于“报表视图”,但在打印预览中,我得到:

ShrinkingBoxes.png

如果其中一些框被“挤出”,您会注意到剩下的框可能与完全不匹配。如果您的报告可以在文本框本身上没有边界,则差异几乎不会引起注意。否则,你必须调整布局,直到它看起来很好(或至少“足够好”)。这就是数据库报告的方式:花半个小时让事情发挥作用,再花两个小时摆弄它,使它“看起来不错”。