我正在尝试使用VBA将条件格式应用于报表。如果在"报表视图"中打开报表,则此操作有效,但如果在"打印预览"中打开该报表,则不起作用(除非我第一次在报表视图中打开(。
此问题不适用于通过向导添加的条件格式。在"打印预览"中正确显示。
我正在使用带有Access版本2208 的Office365
我的设置使用表单允许用户输入日期。然后将此日期作为OpenArg:传递到报告中
Private Sub cmd_Ok_Click()
'DoCmd.OpenReport "Component Value", acViewPreview, , , , Me.txt_Date <- Does not show conditional formatting
DoCmd.OpenReport "Component Value", acViewReport, , , , Me.txt_Date
DoCmd.Close acForm, Me.Name, acSaveNo
End Sub
然后报告在其OnLoad事件中添加一个格式条件
Dim strCondDate As String
Private Sub Report_Load()
If Not IsNull(Me.OpenArgs) Then
strCondDate = Me.OpenArgs
End If
If Not IsNull(strCondDate) Then
With Me.txt_Updated.FormatConditions
With .Add(acExpression, , "[Last Updated] < #" & strCondDate & "#")
.BackColor = vbYellow
End With
End With
End If
End Sub
当我使用acViewPreview打开报表时,我可以中断此代码并确保它正确运行,但格式不可见。
为什么格式条件不显示在"打印预览"中(除非我首先在"报表视图"中打开报表(?如何显示格式?
结论是条件格式规则不能以编程方式添加到直接打开到Print或PrintPreview的报表中,但可以添加到ReportView中。幸运的是,没有必要使用VBA。CF规则可以抓取OpenArgs的内容:Field Value Is less than CDate([OpenArgs])
。否则,在具有用户输入的窗体上具有规则引用控件。
另一种选择是在具有条件VBA结构的OnFormat或OnPrint事件中直接设置Backcolor属性。缺点是这些事件不会在ReportView中执行。