簡體   English   中英

根據其中一個單元格的內容為整行着色

[英]Colour an entire row based on the contents of one of its cells

我正在嘗試根據其中一欄給出的結果為電子表格着色。 我正在使用以下代碼:

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包含“ CORRECT”,我希望A12:G12都被塗成綠色)。 建議我嘗試使用表達式,因此嘗試了以下代碼:

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

但是,這將返回E_INVALIDARG異常。 我會很感激如何解決此問題的任何提示。 我還應該指出,遍歷每一行並一次檢查一行並不是真正的選擇,因為有成千上萬的行。

一旦刪除了多余的右括號並使該列成為絕對值,您的公式就應該起作用

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

這是一個非常非常低科技的答案。 但是,在用顏色突出顯示單元格之后,需要將其設置為(使用代碼),然后復制列中的所有值,並對行本身的“格式”進行粘貼特殊操作。

問題在於它將是靜態的,並且如果您的值隨輸入而變化,則行上的顏色將不可用。

但是,如果這是一次性的,那可能會起作用。

如果這樣做,請確保要評估的列具有與要粘貼到的行中的數據兼容的單元格格式類型(例如:“常規”,“文本”等)。

笨拙,但是如果您絕對需要快速執行此操作,並且只需要執行一次,那么它可能會起作用。

編輯:可以肯定,凱文(Kevin)在下面的答案是一個更好的答案,因為它實際上是通過代碼解決的,即使值在被評估的單元格中發生了變化,它也似乎可以工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM