0

我目前有一个工作表,它查看 B 列并将字符串与 Z 列中的字符串匹配,然后将匹配字符串的颜色更改为 B 列中的 font.color。问题是 B 列由条件格式着色,因此代码无法识别。当条件为真时,我需要能够在 B 列中更改实际的字体颜色。此外,代码需要递增,直到到达工作表的最后一行。

这是我设置的当前条件格式

块引用

=ISNUMBER(SEARCH("Story",Template!D5))=TRUE 'format dark blue
=ISNUMBER(SEARCH("Requirement",Template!D5))=TRUE 'format green
=ISNUMBER(SEARCH("EPIC",Template!D5))=TRUE 'format red
=ISNUMBER(SEARCH("Test",Template!D5))=TRUE 'format teal
=ISNUMBER(SEARCH("New Feature",Template!D5))=TRUE 'format orange
=ISNUMBER(SEARCH("Theme",Template!D5))=TRUE 'format gray

块引用

Sub Main()
  Call NoLinks
  Call SetCellWarning
  Call colortext
End Sub

Sub NoLinks()
ActiveSheet.Hyperlinks.Delete
End Sub

Sub SetCellWarning()
    Dim iLastRow As Long
    Dim cel As Range, rSetColumn As Range

    iLastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).row

    Set rSetColumn = Range(Cells(5, 26), Cells(iLastRow, 26)) ' Column "Z"...

    For Each cel In rSetColumn
        If cel.Value = "" Then
            With cel
                cel.Value = "NOT MAPPED"
            End With
        End If
    Next cel

End Sub

***'The colortext runs but does not update unless the font color is manually updated***    
Sub colortext()
start_row = 5
key_col = 2
linked_col = 26
i = start_row 'start on row one
Do While Not IsEmpty(Cells(i, key_col)) 'Do until empty cell
    o = start_row 'start with row one for second column
    Do While Not IsEmpty(Cells(o, linked_col)) 'Do until empty cell
    If Not InStr(1, Cells(o, linked_col), Cells(i, key_col)) = 0 Then  'if cell    contents found in cell
        With Cells(o, linked_col).Characters(Start:=InStr(1, Cells(o, linked_col), Cells(i, key_col)), Length:=Len(Cells(i, key_col))).Font
            .Color = Cells(i, key_col).Font.Color  'change color of this part of the cell
        End With
    End If
    o = o + 1 'increment the cell in second column
    Loop
    i = i + 1 'increment the cell in the first column
Loop
End Sub

块引用

4

3 回答 3

1

以防万一您只是希望“您之前尝试过的解决方案”起作用,以下是您如何使条件格式起作用:

  1. 选择要应用条件格式的单元格(在 B 列中)
  2. 单击“条件格式”按钮。清除您不再需要的任何规则,然后基于“等式为真”创建“新规则”
  3. 输入以下等式:=ISNUMBER(SEARCH(B1, "EPIC"))
  4. 为其中包含文本“EPIC”的单元格选择您想要的格式(注意 - 使用此“搜索”顺序,我们会查找 B1 中的文本包含在短语“EPIC”中,因此“E”将匹配, “IC”也是如此。如果您只想匹配“That was EPIC”的单元格,则需要颠倒参数的顺序
  5. 为您要匹配的其他单词和您需要的颜色添加更多规则

这是您刚刚创建单个规则时对话框的样子:

在此处输入图像描述

这是完成第二条规则后“条件格式”对话框的样子(在我的示例中,我将这些规则应用于 8 个单元格):

在此处输入图像描述

此时,电子表格如下所示:

在此处输入图像描述

这似乎是您所要求的......如果不是,请在评论中澄清!

于 2013-08-06T23:11:11.573 回答
0

摆脱条件格式很容易:

If (Cells(i, key_col).FormatConditions.Count > 0) Then
    Cells(i, key_col).FormatConditions.Delete 
End If
.Color = Cells(i, key_col).Font.Color  'change color of this part of the cell

如果您愿意,您甚至可以将其存储在FormatCondition变量中并稍后应用于单元格。

于 2013-08-06T21:09:44.537 回答
0

这是获胜的解决方案:

Sub colorkey()

start_row = 5
key_col = 2
flag_col = 4

i = start_row 'start on row one

Do While Not IsEmpty(Cells(i, key_col)) 'Do until empty cell

Tval = Cells(i, flag_col).Value
Select Case Tval
Case "Requirement"
    'cval = green
    cVal = 10
Case "New Feature"
    'cval = orange
    cVal = 46
Case "Test"
    'cval = lt blue
    cVal = 28
Case "Epic"
    'cval = red
    cVal = 3
Case "Story"
    'cval = dk blue
    cVal = 49
Case "Theme"
    'cval = grey
    cVal = 48
Case "NOT MAPPED"
    'cval = Maroon
    cVal = 53
End Select
Cells(i, key_col).Font.ColorIndex = cVal

i = i + 1 'increment the row
Loop

End Sub
于 2013-08-08T16:23:42.780 回答