.interior.color \ VBA EXCEL 2013中范围的值

时间:2016-11-20 09:12:04

标签: excel vba excel-vba

我在列F编号中,每个数字指的是一个颜色代码,我试图根据其值自动更改F中的每个单元格颜色,但是所有仅仅是黑色,下面是我的代码:

Sub Highlight()

 For Each C In Worksheets("Sheet3").Range("F3:F1000")


With Sheet3.Range("$F1:$F1000")
    .FormatConditions.Delete

    With .FormatConditions.Add(Type:=xlExpression, Formula1:="=($F1<>"""")")
        .Interior.Color = C.Value
        .Font.Color = vbWhite
 End With

 End With
 Next C

End Sub

请帮助&amp;提前谢谢你。

2 个答案:

答案 0 :(得分:0)

由于你已经有一个循环来重复F3:F1000中的单元格,所以使用它就足够了。最主要的是改变.Interior.Color到.Interior.ColorIndex

Sub Highlight()

For Each C In Worksheets("Sheet3").Range("F3:F1000")

If (C <> "") Then
    C.Interior.ColorIndex = C.Value
    C.Font.Color = vbWhite
End If

Next C
End Sub

唯一的问题是,如果单元格中的任何数字大于56,您将在ColorIndex值中得到下标错误。您可以通过添加

使其回收颜色
c.Interior.ColorIndex = (c.Value - 1) Mod 56 + 1

答案 1 :(得分:0)

我会将您的代码拆分为2 Sub s:

  1. Sub CondFormat - 应用条件格式(一次)。
  2. Sub Highlight - 根据它的值应用单元格颜色 - 更频繁。
  3. 代码

    Option Explicit
    
    Dim LastRow As Long
    
    Sub CondFormat()
    
    With Worksheets("Sheet3")
        LastRow = .Cells(.Rows.Count, "F").End(xlUp).Row
    
        With .Range("F1:F" & LastRow)
            .FormatConditions.Delete
            .FormatConditions.Add Type:=xlExpression, Formula1:="=($F1<>" & Chr(34) & Chr(34) & ")"
        End With
    
    End With
    
    End Sub
    
    
    Sub Highlight()
    
    Dim Rng As Range
    
    With Worksheets("Sheet3")
        LastRow = .Cells(.Rows.Count, "F").End(xlUp).Row
        For Each Rng In .Range("F3:F" & LastRow)
            Rng.Interior.Color = Rng.Value
            Rng.Font.Color = vbWhite
        Next Rng
    End With
    
    End Sub