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

Vba 在异常表情况下应用条件格式,vba,ms-access,ms-access-2010,Vba,Ms Access,Ms Access 2010,我有一个基于以下查询的数据表表单,它是多个数据集的并集,这些数据集经过数据透视后按日期给出列: +-------------+------------------+----------+----------+-----------+ | statusType | valueType | 8/1/2013 | 9/1/2013 | 10/1/2013 | +-------------+------------------+----------+----------+--------

我有一个基于以下查询的数据表表单,它是多个数据集的并集,这些数据集经过数据透视后按日期给出列:

+-------------+------------------+----------+----------+-----------+
| 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 |
+-------------+------------------+----------+----------+-----------+  ...
我想对每个日期列中的“实际”值设置条件格式,以便为每个值设置颜色,如下所示:

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
  • 实际>=目标:绿色
  • 实际值=目标值的51-99%:蓝色
  • 实际值<目标值的50%:红色
例如,8/1的“设计实际”值为蓝色,9/1和10/1的“开发实际”值分别为绿色和红色

我可以循环使用日期控件设置其条件格式,如下所示:

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的参数中添加什么;对于给定的
statusType
/
实际日期值,如何获取相应的
statusType
/
目标日期值,以便比较它们以设置格式

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


附加说明:基本上,我想做的是根据一行中的颜色值与另一行中同一列中的值的比较方式来确定它们的颜色值。例如,在“8/1/2013”列中,比较“设计实际”值3和“设计目标”值4,以确定“设计实际”值应该是什么颜色。

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

如果您需要为每一行单独配置不同的条件格式,我认为这是行不通的。如果无法在“设计”视图中设置条件格式,则可能也无法使用代码使其正常工作

如果您仍然需要一些代码,下面介绍如何使用表达式在代码中进行条件格式设置:

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

我在上面加了一些解释。是的,我正在尝试仅为“design | actual”行的日期列设置格式。可能会有帮助。所以听起来您想要使用其他行中的值的条件格式?我很确定那是不可能的。如果你真的想这样做,我认为你必须使用一个查询,将所有你想要的数据放到同一行,即使你没有向用户显示所有数据。在你的解释中,你对“设计|实际”的使用令人困惑。字段名显示为statusType和valueType,而不是“design”和“actual”。我想也许我还不明白你想要实现什么。是的,我不清楚,对不起。我只想将格式应用于statusType=“design”和valueType=“actual”所在的行。使用
AcExpression
非常简单,但是正如您所说的,从其他行获取值可能是不可能的(如果没有大量嵌套的DLookup,则会显著降低表单的速度)。我可能会在这个问题上使用Excel导出。