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%:红色
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导出。