更改括号内单元格中文本的颜色

时间:2017-03-22 16:44:44

标签: excel vba excel-vba

我的工作表中有单元格,其中包含一堆文本,但方括号内的某些文字看起来像这样:

  

[分配:此处有一些文字]

     

[选择:这里的一些文字]

我需要一个宏来改变任何文本的颜色,从分配到绿色开始(包括分配)和任何以选择蓝色开始的文本(也包括选择)。无论是最简单的,支架本身都可以改变颜色。

我已经尝试了多种方法来做到这一点,但无法弄清楚正则表达式或替换如何做到这一点。我最近来的是在[]括号内加上所有文本,但不区分“分配”或“选择”。

感谢帮助

编辑:

到目前为止我所拥有的:

Sub test()
    Dim r As Range
    Dim m As Object
    Dim test As Range
    Dim strInput As String
    With CreateObject("VBScript.RegExp")
        .Global = True
        .IgnoreCase = True
        .Pattern = "\[(.*?)\]"
        For Each r In Range("C2:C2")
            If .test(r.Value) Then
                For Each m In .Execute(r.Value)
                    r.Value = Replace(r.Value, m.Value, UCase(m.Value))
                Next
            End If
        Next
    End With
End Sub

1 个答案:

答案 0 :(得分:1)

Range(SomeRange).Characters(start,length).Font.Color = vbGreen

要获得开始和长度,请使用Instr

start = Instr(1, Range(SomeRange).Value, "[Assign", vbTextCompare)
length = Instr(start, Range(SomeRange).Value, "]", vbTextCompare) - start + 1

如果start为零,则找不到字符串。

-

更新:

在我的脑海中,对于同一个单元格中的多个实例:

start = 1

Do

    start = Instr(start, Range(SomeRange).Value, "[Assign", vbTextCompare)

    If start > 0 Then

        length = Instr(start, Range(SomeRange).Value, "]", vbTextCompare) - start + 1

        if length > 1 then Range(SomeRange).Characters(start, length).Font.Color = vbGreen

        start = start + length

    End If

Loop While start > 0