报告格式化 VBA 代码

Reporting on formatting VBA code

我有一份报告,其中包含用于步骤列表的文本框。我需要根据基于查询的特定条件使用 VBA 代码调整它的背景颜色。我已经在详细信息面板的 "On Format" 下设置了代码。如果我喊出一个步骤,它会改变步骤的颜色。如果我调出多个步骤,它只会突出显示最后一个框。对于测试,我有一个包含 13 个步骤的报告,但我想更改第 1 步和第 4 步。这是我使用的代码:

If DCount("*", "qry_step_check1") = 1 And Reports![rpt_WI_BOOK]![qry_Select_Step_Filter_Task].Report![Step].Value = 1 Then
    [Reports]![rpt_WI_BOOK]![qry_Select_Step_Filter_Task].Report![Step].BackColor = lngYellow
Else
    [Reports]![rpt_WI_BOOK]![qry_Select_Step_Filter_Task].Report![Step].BackColor = lngWhite
End If

If DCount("*", "qry_step_check4") = 1 And Reports![rpt_WI_BOOK]![qry_Select_Step_Filter_Task].Report![Step].Value = 4 Then
        [Reports]![rpt_WI_BOOK]![qry_Select_Step_Filter_Task].Report![Step].BackColor = lngYellow
Else
        [Reports]![rpt_WI_BOOK]![qry_Select_Step_Filter_Task].Report![Step].BackColor = lngWhite
End If

在这种情况下,只有第 4 步发生了变化。如果我删除第 4 步的列表,第 1 步将突出显示。在这一点上,我不确定我正在做的事情是否有效,或者我是否只是遗漏了一些简单的东西。我也尝试过使用 DLookups 得到相同的结果。我知道代码可能不是最高效的,但此时,我只是想让它发挥作用,以后可以担心更高效的代码。这是我正在使用的 designview 的快速截图。

经过多次探索和督促,我找到了一个解决方案,可能不是最干净的,但它可以满足我的需要。幸运的是,它并没有减慢报告的速度。

Dim lngRed As Long, lngYellow As Long, lngWhite As Long
Dim i As Integer
lngRed = RGB(255, 0, 0)
 lngBlack = RGB(0, 0, 0)
 lngYellow = RGB(255, 255, 0)
 lngWhite = RGB(255, 255, 255)
 i = 1

Do Until i = 75

If Reports![rpt_WI_BOOK]![qry_Select_Step_Filter_Task].Report![Step].Value = i Then
If DLookup("[Step_Int]", "[qry_step_check]", "[Step_Int] = " & i) = i Then
[Reports]![rpt_WI_BOOK]![qry_Select_Step_Filter_Task].Report![Step].BackColor = lngYellow
Else
[Reports]![rpt_WI_BOOK]![qry_Select_Step_Filter_Task].Report![Step].BackColor = lngWhite
End If
End If
i = i + 1
Loop

使用此代码几天后,确定在大型报告上,它确实减慢了速度。我最终删除了 'Step' 框中的代码并设置了条件格式,现在它的处理速度提高了大约 4 倍。 这是条件格式中使用的表达式:

DLookUp("[Step_Int]","[qry_step_check1]","[Step_Int] = Reports!rpt_WI_Book!qry_select_step_filter_task.Report!Step.Value")=[Reports]![rpt_WI_Book]![qry_Select_Step_Filter_Task].[Report]![Step].[Value] And DLookUp("[Task_ID]","[qry_step_check1]","[Task_ID] = Reports!rpt_WI_Book!Text474.Value")=[Reports]![rpt_WI_Book].[Report]![Text474].[Value]