[英]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
我發現 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.