颜色编码单元格基于具有特定标题的列的值

时间:2014-12-11 12:35:12

标签: excel vba excel-vba color-codes

我在vba中有这个代码,它定义了我希望在Excel中的另一个选项卡中复制/粘贴的列标题的数组。但是,在其中一个新标签中,我还希望根据列中的值来对一些单元格进行颜色编码" BOM处理类型(A,U,R,D)"它对应于该数组中的位置2。代码运行时没有给我一个错误,但细胞根本不会改变颜色。跳过一些部分,这就是我所拥有的,有谁知道如何解决它?

'我的变数。

Dim i As Long, rngCell As Range, rCell As Range
Dim c As Long, v As Long, vMHDRs As Variant, vBHDRs As Variant
Dim s As Long, vNWSs As Variant, wsMM As Worksheet

vBHDRs = Array("BOM LEVEL", "BOM PROCESS TYPE (A, U, R, D)", "ALTERNATIVE ITEM: GROUP")

'跳过大部分代码并跳转到颜色编码部分:

With Sheets("BOM")
v = 2
Set rngCell = Sheets("BOM").UsedRange.Find(What:=vBHDRs(v), LookAt:=xlWhole)   
If Not rngCell Is Nothing Then        
Set rngCell = Intersect(Sheets("BOM").UsedRange, rngCell.EntireColumn)
    For Each rCell In rngCell
    If rCell.Value = "D" Then rCell.Interior.ColorIndex = 3
    If rCell.Value = "R" Then rCell.Interior.ColorIndex = 6
    If rCell.Value = "U" Then rCell.Interior.ColorIndex = 6
    Next
End If
End With

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

当您使用构造时,您不应该使用表格(“BOM”),不是吗?

Set rngCell = .UsedRange.Find(What:=vBHDRs(v), LookAt:=xlWhole)  

答案 1 :(得分:0)

如果您的目标工作表和单元格着色周围的逻辑是一致的,那么您可能无法使用目标工作表单元格上的条件格式实现所需的目标。然后你需要做的就是复制。

答案 2 :(得分:0)

我刚刚模拟了您的着色代码并使其正常工作。我相信你的问题是v = 2行 这是因为您分配数组的方式和默认的Excel设置。使用上述方法分配时,数组的下边界为0,因此这意味着v = 2指的是“ALTERNATIVE ITEM:GROUP”列,因此它不会在该列中找到D,R或U. 您可以更改为V = 1(这可以工作)或在模块顶部设置选项库1,因为这会将默认下限更改为1.如果您有多个模块,我实际建议不要使用选项库1你忘了把选项库1放在所有这些的顶部,你可能会得到意想不到的结果。 如上所述,你不需要在yoru内部使用Sheets(“BOM”)和块,但它不会影响它的工作。这是对我有用的略微修改的代码

Sub test2()
Dim i As Long, rngCell As Range, rCell As Range
Dim c As Long, v As Long, vMHDRs As Variant, vBHDRs As Variant
Dim s As Long, vNWSs As Variant, wsMM As Worksheet
vBHDRs = Array("BOM LEVEL", "BOM PROCESS TYPE (A, U, R, D)", "ALTERNATIVE ITEM: GROUP")
With Sheets("BOM")
    v = 1
    Set rngCell = Sheets("BOM").UsedRange.Find(What:=vBHDRs(v), LookAt:=xlWhole)
    If Not rngCell Is Nothing Then
    Set rngCell = Intersect(Sheets("BOM").UsedRange, rngCell.EntireColumn)
        For Each rCell In rngCell
        If rCell.Value = "D" Then rCell.Interior.ColorIndex = 3
        If rCell.Value = "R" Then rCell.Interior.ColorIndex = 6
        If rCell.Value = "U" Then rCell.Interior.ColorIndex = 6
        Next
    End If
End With
End Sub