通过VBA MS Access报告的条件格式无效

时间:2015-06-12 18:57:15

标签: ms-access report

我在尝试有条件地格式化MS Access 2007表单内的报告中的记录时遇到了麻烦。

我已经在互联网上搜索了,并且我已经看到许多os研究员说明可以通过代码实现方法Detail_Paint()为报告中的详细信息部分Paint绘制单个记录中的可视化更改。那些人说这样的事情会起作用:

Private Sub Detail_Paint()
    val = CStr(Me.someTextBox.Value)
    If val = "constraint" Then
        Me.lineStrikethrough.BorderStyle = 0
    End If
End Sub

问题是虽然读取语句 Me.someTextBox.Value 在抛出Paint事件时返回每条记录的值,但写入语句 Me.lineStrikethrough.BorderStyle = 0 < / em>在我的报告中为每一行行写入属性BorderStyle的值,不仅仅是关于我从 someTextBox 字段读取其值的单个记录的值。< / p>

谁能告诉我为什么会这样?如果这是正确的行为(虽然对我来说似乎不对),我怎样才能达到目标?

注意: lineStrikethrough 用于对报表中的记录执行删除线效果。如果有其他方法可以做到这一点,我很乐意知道。

2 个答案:

答案 0 :(得分:1)

两件事:

1 - 使用Detail的On Print事件,而不是On Paint事件。

Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer)
    val = CStr(Me.someTextBox.Value)
    If val = "constraint" Then
        Me.lineStrikethrough.BorderStyle = 0
    End If
End Sub

2 - 要查看条件格式设置,请始终在“打印预览”中打开报告,而不是“报告视图”。

答案 1 :(得分:1)

你真的很亲密! :-)在我的测试中,似乎Detail_Paint()事件允许您更改控件的格式,但更改 将在后续记录中继续 ,直到您更改为止/将它们重置为其他东西。

在您的代码示例中,您只需添加另一行,以便在不再符合条件时重新启用删除线BorderStyle

Private Sub Detail_Paint()
    Val = CStr(Me.someTextBox.Value)
    If Val = "constraint" Then
        Me.lineStrikethrough.BorderStyle = 0
    Else
        Me.lineStrikethrough.BorderStyle = 1
    End If
End Sub

我在code sample on MSDN上发现了这个线索,它使用Detail_Paint()方法展示了条件格式。