在值条件下更改单元格颜色会给出错误的颜色

时间:2019-02-23 08:28:43

标签: excel vba

我* m试图在有条件的条件下更改单元格颜色,情况是我的工作中有不同的帖子,他们选择将个人电脑放在托盘中

在每个站点上,我们计算小时数和每小时pcs = pcs:hours = solution

示例:评级为每小时120个或更多的电池单元为绿色 之间:每小时119pcs至80pcs单元格颜色为橙色 每小时少于80个电池单元的颜色是红色

现在对于许多帖子,我的代码都有效,但是对于某些帖子,它为我找不到我的原因提供了错误的颜色

我不知道这是怎么回事

我发布了Vman的代码,所有工作站都有这个代码,但是就像我之前告诉的那样,只是更改条件值Vman每小时是120个 其他电台可以是2250、100、350、300

以此类推,大多数测站都能给出正确的颜色结果

是Vman的代码

If ComboBox1.Text = "Vman" Then
   Range("ah10").Font.Color = vbBlack
   Range("ah10").Font.Bold = True
   Range("ah10").Font.Color = vbBlack
   'grijs-Gray
   If Range("ah10").Value = "" Then
      Range("ah10").Interior.Color = RGB(128, 128, 128)
      Range("ah10").Font.Color = vbBlack
      'rood-Red
   ElseIf Range("ah10").Value < "80" Then
      If Range("ah10").Value > "" Then
         Range("ah10").Interior.Color = vbRed
         Range("ah10").Font.Color = vbWhite
      End If
      'oranje-Orange
   ElseIf Range("ah10").Value >= "80" Then
      If Range("ah10").Value < "120" Then
         Range("ah10").Interior.Color = RGB(255, 153, 0)
      End If
      'groen-Green
   ElseIf Range("ah10").Value >= "120" Then
      Range("ah10").Interior.Color = RGB(146, 208, 80)
   End If
End If

If ComboBox1.Text = "Vman 3" Then
   Range("ah10").Font.Color = vbBlack
   Range("ah10").Font.Bold = True
   Range("ah10").Font.Color = vbBlack
   'grijs-Gray
   If Range("ah10").Value = "" Then
      Range("ah10").Interior.Color = RGB(128, 128, 128)
      Range("ah10").Font.Color = vbBlack
      'rood-Red
   ElseIf Range("ah10").Value < "80" Then
      If Range("ah10").Value > "" Then
         Range("ah10").Interior.Color = vbRed
         Range("ah10").Font.Color = vbWhite
      End If
      'oranje-Orange
   ElseIf Range("ah10").Value >= "80" Then
      If Range("ah10").Value < "120" Then
         Range("ah10").Interior.Color = RGB(255, 153, 0)
      End If
      'groen-Green
   ElseIf Range("ah10").Value >= "120" Then
      Range("ah10").Interior.Color = RGB(146, 208, 80)
   End If
End If

我找不到适用于大多数工作站的代码的解决方案,虽然颜色很好,但有些却不能。

1 个答案:

答案 0 :(得分:0)

是否有理由两次输入代码?

同样,它不起作用的原因似乎是因为您的值位于“引号”之内。

关于我为什么使用.value2而不是.value的信息,请参阅此帖子:
What is the difference between .text, .value, and .value2?

我还建议使用变量来引用范围。这样,您只需更改一次即可,而无需在代码中更改10个不同的位置。

尝试一下

Dim pieces As Range
Set pieces = Range("AH10") 
If ComboBox1.Text = "Vman" Or ComboBox1.Text = "Vman 3" Or ComboBox1.Text = "Vman 4" Then
    pieces.Font.Color = vbBlack
    pieces.Font.Bold = True
    If pieces.Value2 = "" Then                              'grijs-Gray
        pieces.Interior.Color = RGB(128, 128, 128)
    ElseIf pieces.Value2 < 80 Then                          'rood-Red
        pieces.Interior.Color = vbRed
        pieces.Font.Color = vbWhite
    ElseIf pieces.Value2 > 79 And pieces.Value2 < 120 Then  'oranje-Orange
        pieces.Interior.Color = RGB(255, 153, 0)
    ElseIf pieces.Value2 > 119 Then                         'groen-Green
        pieces.Interior.Color = RGB(146, 208, 80)
    End If
End If

这样重复时,可以使用With ... End With代替变量,也可以将其与变量结合使用。

If ComboBox1.Text = "Vman" Or ComboBox1.Text = "Vman 3" Or ComboBox1.Text = "Vman 4" Then
    With Range("AH10")
        .Font.Color = vbBlack
        .Font.Bold = True
        If .Value2 = "" Then                               'grijs-Gray
            .Interior.Color = RGB(128, 128, 128)
        ElseIf .Value2 < 80 Then                           'rood-Red
            .Interior.Color = vbRed
            .Font.Color = vbWhite
        ElseIf .Value2 > 79 And pieces.Value2 < 120 Then   'oranje-Orange
            .Interior.Color = RGB(255, 153, 0)
        ElseIf .Value2 > 119 Then                          'groen-Green
            .Interior.Color = RGB(146, 208, 80)
        End If
    End With
End If