Vba 基于具有特定标题的列中的值对单元格进行颜色编码

Vba 基于具有特定标题的列中的值对单元格进行颜色编码,vba,excel,color-codes,Vba,Excel,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, vM

我在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

有什么想法吗?

当你使用建筑时,你不应该使用图纸(“BOM”),对吗

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

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

我刚刚模拟了你的着色代码,让它工作起来。我相信你的问题是v=2线 这是因为您分配数组的方式和默认的excel设置。当使用上述方法分配时,数组的下边界为0,因此这意味着您的v=2引用的是“ALTERNATIVE ITEM:GROUP”列,因此在该列中找不到D、R或U。 您可以更改为V=1(这样可以工作),也可以在模块顶部设置选项base 1,因为这会将默认下边界更改为1。实际上,我建议不要使用选项base 1,如果您有多个模块,就像您忘记将选项base 1放在所有模块的顶部一样,您可能会得到意外的结果。 如上所述,您不需要在带有块的YRU中使用图纸(“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

是的,但我的宏也会创建新的工作表,因此我无法预先使用条件格式在工作表上设置格式。请在每个循环中尝试MsgBox(rCell.Address)。如果为空,则您知道必须搜索的位置:)