在异常表情况下应用条件格式

时间:2013-08-13 19:23:30

标签: vba ms-access ms-access-2010

我有一个基于以下查询的数据表表单,该表单是几个数据集的并集,这些数据集已经过轮换以按日期提供列:

+-------------+------------------+----------+----------+-----------+
| statusType  |    valueType     | 8/1/2013 | 9/1/2013 | 10/1/2013 |
+-------------+------------------+----------+----------+-----------+
| design      | actual           |        3 |        6 |         7 |
| design      | target           |        4 |        5 |         4 |
| design      | cumulativeActual |       60 |       66 |        67 |
| design      | cumulativeTarget |       50 |       55 |        54 |
| development | actual           |       10 |       12 |         2 |
| development | target           |       10 |        8 |         8 |
| development | cumulativeActual |       30 |       42 |        44 |
| development | cumulativeTarget |       40 |       48 |        56 |
+-------------+------------------+----------+----------+-----------+  ...

我想在每个日期列的“实际”值上设置条件格式,以便为每个值设置颜色,如下所示:

  • actual> = target:green
  • actual =目标的51-99%:蓝色
  • 实际<目标的50%:红色

因此,例如,8/1的“design actual”值为蓝色,9/1和10/1的“development actual”值分别为绿色和红色。

我可以遍历日期控件设置条件格式,如下所示:

Private Sub Form_Load()

Dim ctrl As Control
Dim tb As TextBox


For Each ctrl In Me.Controls
    If IsDate(ctrl.Name) Then
        Set tb = ctrl
        tb.FormatConditions.Add 'not sure what to put here
    End If
Next

End Sub

我不明白我应该在FormatConditions.Add的论点中加入什么;对于给定的statusType / actual /日期值,我如何获取相应的statusType / target /日期值,以便比较它们以设置格式?

请注意,此表单是只读的,因此它可能不必是有条件的 - 也许我可以在加载表单时根据上述规则为这些值分配静态颜色。

附加说明:基本上,我想要做的是根据它们与另一行中同一列中的值的比较方式在一行中的颜色值。例如。在“8/1/2013”​​栏中,将“design | actual”值3与“design | target”值4进行比较,确定“design | actual”值应该是什么颜色。

1 个答案:

答案 0 :(得分:0)

我想我不太明白你要做什么。

如果您需要为每一行单独配置不同的条件格式,我认为这不会起作用。如果您无法在设计视图中设置条件格式,那么您可能无法使用代码来使用它。

如果你仍然需要一些代码,下面是使用表达式在代码中进行条件格式化的方法:

Private Sub Form_Load()

    Dim ctrl As Control
    Dim tb As TextBox
    Dim fc as FormatCondition

    For Each ctrl In Me.Controls
        If IsDate(ctrl.Name) Then
            Set tb = ctrl
            Set fc = tb.FormatConditions.Add(acExpression, , "Me![FieldName] = ""Value""")
            fc.BackColor = 13611711
        End If
    Next

End Sub