0

我正在尝试根据其中一列中给出的结果为电子表格着色。我正在使用以下代码:

With newSheet.Range("B:B")
    .FormatConditions.Add(Excel.XlFormatConditionType.xlCellValue, Excel.XlFormatConditionOperator.xlEqual, "CORRECT")
    .FormatConditions(1).Interior.ColorIndex = 4

    .FormatConditions.Add(Excel.XlFormatConditionType.xlCellValue, Excel.XlFormatConditionOperator.xlEqual, "INCORRECT")
    .FormatConditions(2).Interior.ColorIndex = 3
End With

不幸的是,这只会给包含“正确”或“错误”的单元格着色。我希望它扩展到它们所在的行(例如,如果 B12 包含“正确”,我希望 A12:G12 全部为绿色)。有人建议我尝试使用表达式,所以我尝试了以下代码:

.FormatConditions.Add(Type:=XlFormatConditionType.xlExpression, Formula1:="=B" & row & "= ""CORRECT"")")
.FormatConditions(1).Interior.ColorIndex = 4

但是,这会返回 E_INVALIDARG 异常。我将不胜感激有关如何解决此问题的任何提示。我还应该注意,循环遍历每一行并一次检查一个并不是真正的选择,因为有数千行。

4

3 回答 3

4

一旦删除多余的右括号并使列成为绝对值,您的公式就应该起作用

.FormatConditions.Add(Type:=XlFormatConditionType.xlExpression, Formula1:="=$B1= ""CORRECT""")
.FormatConditions(1).Interior.ColorIndex = 4

确保将公式$B1中的行设置为格式化范围的第一行(不需要循环)

于 2012-11-05T22:15:17.403 回答
0

您可以将其粘贴到相关工作表中:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Integer
    i = 1
    While Range("B" & i).Value2 <> ""
        If Range("B" & i).Value2 = "INCORRECT" Then
            Range("A" & i & ":G" & i).Interior.ColorIndex = 3
        ElseIf Range("B" & i).Value2 = "CORRECT" Then
            Range("A" & i & ":G" & i).Interior.ColorIndex = 4
        Else
            Range("A" & i & ":G" & i).Interior.ColorIndex = 0
        End If
        i = i + 1
    Wend
End Sub

这假设您的数据从第 1 行开始(否则更改 的起始值i)。

于 2012-11-05T22:10:15.830 回答
0

这是一个非常非常低技术的答案。但是,在您以您需要的颜色突出显示单元格之后(使用代码),复制列中的所有值并在行本身上为“格式”执行特殊粘贴。

问题在于它将是静态的,如果您的值随输入而变化,则行上的颜色将关闭。

但如果这是一次性的事情,那可能会奏效。

如果您这样做,请确保您正在评估的列具有与您要粘贴的行中的数据兼容的单元格格式类型(即:“常规”、“文本”等)。

Kludgey,但如果你绝对需要这个速度并且你只需要做一次,它可能会起作用。

编辑:很确定凯文在下面的答案是一个更好的答案,因为它实际上用代码解决了它,并且即使评估单元格中的值发生变化,它似乎也可以工作。

于 2012-11-05T22:10:38.043 回答