【问题标题】:Conditional Formatting via VBA MS Access Report not working通过 VBA MS 访问报告的条件格式不起作用
【发布时间】:2015-08-28 21:25:42
【问题描述】:

我在尝试有条件地格式化 MS Access 2007 表单内报告中的记录展示时遇到问题。

我已经在 Internet 上进行了搜索,并且我看到很多 os 研究员指出,可以通过为报告中的 Detail 部分的事件 Paint 实现 Detail_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 为我的报告中的每一行 写入属性 BorderStyle 的值,而不仅仅是针对我从 someTextBox 字段中读取其值的单个记录的记录。

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

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

【问题讨论】:

  • 什么是num?我没有看到它在任何地方定义。
  • 嗨@MarkC。这是一个错字。 num 实际上是 val。不过不用担心,我的代码运行版本是正确的。

标签: ms-access report


【解决方案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() 方法的条件格式。

【讨论】:

    【解决方案2】:

    两件事:

    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 - 要查看条件格式,请始终在打印预览而不是报告视图中打开您的报告。

    【讨论】:

    • 有没有办法在表单中的打印视图中查看报表?
    • 我不这么认为,因为在打印预览模式下,页面会根据打印设置(边距、大小、纵向/横向)对齐,并且可以使用有条件的功能区选项卡导出为其他格式。为什么没有在打印预览中触发报告的命令按钮:DoCmd.OpenReport "rptName", acViewPreview
    • 不幸的是,我为之工作的客户希望以这种方式呈现表格,并将报告放在表格中以供列出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多