每次预览/打印报告时会触发什么事件?

时间:2013-07-17 15:51:50

标签: events ms-access report access-vba ms-access-2010

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

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

工作正常,但我用作报告记录源的查询允许一次打印一系列记录(每页/报告1个),我希望上面的代码针对每个页面/报告运行。我不确定将代码放在何处,以便每条记录都按规则播放。目前,如果我选择8个记录的范围,只有第一个记录可以满足我的需要,当我浏览打印预览屏幕中的其他记录时,报告的格式在应该更改时保持不变。

我尝试过以下事件:

报告:

  • 当前
  • 开启
  • On Got Focus
  • 开启
  • 开启激活
  • 在页面

部分:

  • 格式化
  • 打印
  • On Paint

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

2 个答案:

答案 0 :(得分:4)

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

我正在使用Details部分的Format事件:

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)

答案 1 :(得分:1)

请注意Visible事件中没有Detail_Paint()属性,这是您需要用于在报告视图中应用条件格式的事件。 (如果您尝试做一些花哨的事情,例如模拟超链接以进行深入挖掘效果,则可能需要这样做。)

解决方法是将文本框的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

示例输出:

Note hidden even numbers