2

我想评估文本框报告控件的值并根据其值隐藏或显示它,我可以使用 VBA 轻松实现:

If Me.Fixed.Value = 0 Then
    Me.Fixed.Visible = False
End If

这很好用,但是我用作报告记录源的查询允许一次打印一系列记录(每页/报告 1 个),并且我希望为每个页面/报告运行上述代码。我不确定将代码放在哪里,以便每条记录都按规则播放。目前,如果我选择 8 条记录的范围,则只有第一个可以执行我想要的操作,并且当我在打印预览屏幕中浏览其他记录时,报告的格式在应该更改时保持不变。

我尝试了以下事件:

报告:

  • 在电流
  • 负载
  • 获得焦点
  • 打开时
  • 激活时
  • 在页面上

部分:

  • 关于格式
  • 打印时
  • 上漆

我可以将我的 VBA 放在哪里,以便每次滚动/导航该报告上返回的记录范围时,我的代码都会运行?

4

2 回答 2

4

您还需要将该Visible属性设置回 True ,否则它将保持不可见。

我正在使用详细信息部分的格式事件:

Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)
    If Me.Fixed = 0 Then
        Me.Fixed.Visible = False
    Else
        Me.Fixed.Visible = True
    End If
End Sub

这适用于打印预览,但不适用于报告视图。可能有一种方法可以使其与报告视图一起使用,但我从不使用此视图。

该语句可以简化:

Me.Fixed.Visible = Not (Me.Fixed = 0)
于 2013-07-17T17:50:58.867 回答
1

请注意,该Visible属性在事件中不可用,Detail_Paint()您需要使用该事件在Report View中应用条件格式。(如果您尝试做一些花哨的事情,例如模拟超链接以获得向下钻取效果,则可能需要这样做。)

一种解决方法是将ForeColor文本框的 设置为等于BackColor。尽管从技术上讲,文本仍然存在,但它不会“显示”在显示的报告上,从而模拟隐藏字段。

Private Sub Detail_Paint()
    ' Check for even numbers
    If (txtID Mod 2 = 0) Then
        txtID.ForeColor = vbBlack
    Else
        ' Set to back color to simulate hidden or transparent.
        ' (Assuming we are using a Normal BackStyle)
        txtID.ForeColor = txtID.BackColor
    End If
End Sub

示例输出:

注意隐藏的偶数

于 2016-02-26T16:51:16.413 回答