我尝试根据其中一个列中的结果为电子表格着色。我使用以下代码:
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
不幸的是,这只会使包含" CORRECT"或" INCORRECT"。我希望它扩展到它们所在的行(例如,如果B12包含" CORRECT",我希望A12:G12全部为绿色)。有人建议我尝试使用表达式,所以我尝试了以下代码:
.FormatConditions.Add(Type:=XlFormatConditionType.xlExpression, Formula1:="=B" & row & "= ""CORRECT"")")
.FormatConditions(1).Interior.ColorIndex = 4
然而,这会返回E_INVALIDARG异常。我很感激有关如何解决此问题的任何提示。我还应该注意,循环遍历每一行并一次检查一行并不是一种选择,因为有数千行。
答案 0 :(得分:4)
一旦删除多余的右括号并使列成为绝对值
,您的公式应该有效.FormatConditions.Add(Type:=XlFormatConditionType.xlExpression, Formula1:="=$B1= ""CORRECT""")
.FormatConditions(1).Interior.ColorIndex = 4
确保将公式$B1
中的行设置为格式化范围的第一行(不需要循环)
答案 1 :(得分: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
的起始值)。
答案 2 :(得分:0)
这是一个非常非常低技术的答案。但是,在您需要使用颜色突出显示单元格后(使用代码),复制列中的所有值,并对行本身的“格式”执行粘贴特殊操作。
问题在于它是静态的,如果你的值随输入而变化,那么行上的颜色就会消失。
但如果它是一次性的话,那可能会奏效。
如果这样做,请确保您评估的列具有与您要粘贴的行中的数据兼容的单元格格式(即:“常规”,“文本”等)。
Kludgey,但如果你绝对需要这么快,你只需要做一次,它可能会有效。
编辑:非常肯定凯文在下面的答案是一个更好的答案,因为它实际上用代码解决了它,并且看起来即使值在评估的单元格中发生变化也会起作用。