簡體   English   中英

更改單元格中包含特定值的一行文本的字體顏色

[英]Change font color for a row of text in cell which contains a certain value

我正在用 excel 編寫一個簽入/簽出程序,並收到請求,如果一行包含“|0|” 它應該得到不同的字體顏色。

我已經嘗試過 Instr 和 Cells().Characters 但我似乎無法弄清楚如何去做。

單元格可以有多種文本行。 這很容易通過在返回時拆分它們並使用 for 循環來解決,但我似乎無法弄清楚如何為包含所需值的一行文本分配不同的字體顏色。

用於說明數據的圖像:

在此處輸入圖像描述

我如何最好地解決這個問題?

補充資料:

這樣做的目的是在按鈕上按下 |O| 所在的整行文本。 is 會以不同的顏色着色。 沒有這個的其他文本行將保持相同的顏色。

就像在這個圖像中作為一個概念

[在此處輸入圖像描述 ]

嘗試這個。 這個對我有用。

    Sub ChangeRowFontColour()
    
    Dim rng As Range
    Dim TextToFind As String
    Dim FirstFound As String
    
    TextToFind = "Specific Text"

        With ActiveSheet.UsedRange
            Set rng = .Cells.Find(TextToFind, LookIn:=xlValues)
            
            If Not rng Is Nothing Then
            FirstFound = rng.Address
                Do
                    rng.EntireRow.Font.ColorIndex = 3
                                            
                    For Each part In rng
                        lenOfPart = Len(part)
                        lenTextToFind = Len(TextToFind)
                        For i = 1 To lenOfPart
                            tempStr = Mid(part, i, lenTextToFind)
                            If tempStr = TextToFind Then
                                part.Characters(Start:=i, Length:=lenTextToFind).Font.ColorIndex = 0
                            End If
                        Next i
                    Next
                    
                    Set rng = .FindNext(rng)
                  
                Loop While Not rng Is Nothing And rng.Address <> FirstFound
            End If
        End With
            
End Sub

嘗試這個

Public Sub ExampleMainSub()
    Dim cell As Range
    For Each cell In Selection
        If HasMySymbols(cell.Value) Then
            WorkWithCellContent cell
        Else
            cell.Font.ColorIndex = xlAutomatic
            cell.Font.TintAndShade = 0
        End If
    Next cell
End Sub

Private Sub WorkWithCellContent(ByVal cell As Range)
    Dim arr As Variant
    arr = Split(cell.Value, Chr(10))
    
    Dim firstPosOfRow As Long
    firstPosOfRow = 1
    
    Dim subLine As Variant
    For Each subLine In arr
        If HasMySymbols(subLine) Then
            cell.Characters(start:=firstPosOfRow, Length:=Len(subLine)).Font.Color = vbRed
        Else
            cell.Characters(start:=firstPosOfRow, Length:=Len(subLine)).Font.ColorIndex = xlAutomatic
        End If
        firstPosOfRow = firstPosOfRow + Len(subLine) + 1 '+1 is needed
    Next subLine
    
End Sub

Private Function HasMySymbols(ByVal somestring As String) As Boolean
    HasMySymbols = InStr(1, somestring, "|0|") > 0
End Function

暫無
暫無

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

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