簡體   English   中英

通過 VBA MS 訪問報告的條件格式不起作用

[英]Conditional Formatting via VBA MS Access Report not working

我在嘗試有條件地格式化 MS Access 2007 表單內的報告中的記錄展示時遇到問題。

我在互聯網上搜索過,我看到很多 os 研究員說,可以通過為報告中的詳細信息部分的事件繪制實現方法 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用於對報表中的記錄執行刪除線效果。 如果有另一種方法可以做到這一點,我會很高興知道。

兩件事情:

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-要查看條件格式,請始終在“打印預覽”而不是“報告視圖”中打開報告。

你真的很親密! :-)在我的測試中, 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

在MSDN上的一個代碼示例中找到了這個線索,該示例演示了使用Detail_Paint()方法進行條件格式設置。

我發現 Select Case 最適合用於連續形式的 if 語句的細節繪制。

'私人子Detail_Paint()

Select Case CStr(Me.someTextBox.Value)

    Case "constraint"
        Me.lineStrikethrough.BorderStyle = 0

    Case Else
        Me.lineStrikethrough.BorderStyle = 1 'or what the default value is

End Select

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM