根据其中一个单元格的内容为整行着色

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

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都是绿色的)。 有人build议我尝试使用expression式,所以我尝试了下面的代码:

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

但是,这会返回一个E_INVALIDARGexception。 我将不胜感激关于如何去解决这个问题的任何提示。 我还应该注意到,循环遍历每一行并且一次检查一行并不是一个真正的select,因为有成千上万行。

您的公式应该工作,一旦你删除多余的右括号,并使列的绝对值

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

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

您可以将其粘贴到问题表中:

 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的起始值)。

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

问题在于它是静态的,如果你的值随着input而改变,行上的着色将被closures。

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

如果你这样做,确保你正在评估的列有一个单元格格式types(即:“常规”,“文本”等),与您粘贴到的行中的数据兼容。

Kludgey,但是如果你绝对需要这个,而且你只需要做一次,那可能就行了。

编辑:很肯定凯文的回答下面是一个更好的答案,因为它实际上解决了它的代码,好像它会工作,即使在评估单元格中的值的变化。