首页 > 解决方案 > 您可以使用什么 VBA 字符串对象来修改段落

问题描述

我正在寻找一个可以在 Excel VBA 中声明的字符串对象,我可以操纵段落样式。我知道您可以使用 Range 对象执行此操作,但是我实际上是在以编程方式构建富文本字符串,然后将该文本分配给函数的结果。

看这里。

Function makestring(char As String) As String
    Dim myString As String
    myString = "hello world" & char
    myString = myString & "this is the second line"
    myString.Characters(1.11).Font.color = Red ' this line is not valid
    makestring = myString
End Function

标签: stringvbaexcel

解决方案


您不能按照您在伪代码中建议的方式为字符串分配字体颜色。执行此操作的正确方法是在将字符串插入文档时将字体颜色分配给范围对象。

以下伪代码行向我建议,您只希望字符串的一部分具有某种颜色:

myString.Characters(1.11).Font.color = Red ' this line is not valid

例如,在单元格 A1 中插入字符串“Red and blue”。以下代码会将单元格 A1 中字符串中的子字符串“Red”的字体颜色更改为红色:

With Range("A1").Characters(Start:=1, Length:=3).Font
    .Color = RGB(255, 0, 0) 'red
End With

插入函数返回的字符串时,只需通过回车将其拆分,然后分配适当的字体颜色。以下子例程将要插入字符串的范围和字符串本身作为参数,然后在每行文本的红色和黑色字体颜色之间交替:

Sub ChangeLineFontColors(myString As String, rng As Range)

    Dim i As Integer, j As Integer, sLen As Integer
    Dim vItem As Variant

    If rng Is Nothing Then Exit Sub
    If myString <> vbNullString Then

        Application.ScreenUpdating = False

        rng.Value = myString

        If InStr(1, myString, Chr(10)) > 0 Then
            vItem = Split(myString, Chr(10)) ' change delimiter to Chr(13) or 'vbNewline', if required
            j = 1
            For i = LBound(vItem) To UBound(vItem)
                sLen = Len(vItem(i))
                With rng.Characters(Start:=j, Length:=sLen).Font
                    If i Mod 2 = 0 Then
                        .Color = RGB(255, 0, 0) 'red
                    Else
                        .Color = RGB(0, 0, 0) 'black
                    End If
                    j = j + sLen + 1
                End With
            Next i
        End If

        Application.ScreenUpdating = True

    End If

End Sub

推荐阅读