6

我一直在构建一些有趣的可视化,这些可视化依赖于 VBA 代码为 Excel 中的子字符串设置不同颜色的能力。对于包含字符串的单元格,语法的工作方式如下rCell.Characters(start,end).Font.Color=SomeColour

我的应用程序通过将新字符串附加到现有值然后设置新字符串的颜色,一步构建字符串并设置颜色值。这没有用。从一个完整的字符串开始,然后为多个子字符串着色确实有效。

两个简单的例程说明了区别:

    Sub TestColourString1()
    'designed to show that substring colour can be done to preexisting string
    Dim rngTestString As Range

    Set rngTestString = Range("colour_string")

    rngTestString.Value = "red green blue"

    rngTestString.Characters(1, 4).Font.Color = RGB(255, 0, 0)
    rngTestString.Characters(5, 10).Font.Color = RGB(0, 255, 0)
    rngTestString.Characters(11, 14).Font.Color = RGB(0, 0, 255)

    End Sub




    Sub TestColourString2()
    'designed to show that setting colour while building string doesn't work
    Dim rngTestString As Range

    Set rngTestString = Range("colour_string")

    rngTestString.Value = "red "
    rngTestString.Characters(1, 4).Font.Color = RGB(255, 0, 0)

    rngTestString.Value = rngTestString.Value & "green "
    rngTestString.Characters(5, 10).Font.Color = RGB(0, 255, 0)

    rngTestString.Value = rngTestString.Value & "blue"
    rngTestString.Characters(11, 14).Font.Color = RGB(0, 0, 255)


    End Sub

这两个例程导致如下所示的两个不同结果: excel中两个单元格中的图像

对于具有更多子段的更长字符串,情况更糟。我正在使用 Excel 2010。

那么这是我的错还是一个错误?有没有更好的方法从 VBA 创建和着色字符串?

4

2 回答 2

7

分配.Value并不能神奇地确定如何附加到现有数据。它删除旧数据并放入新数据。

如果字符有颜色,则第一个字符的颜色用于为新字符串着色。

如果您想要实际追加,就像您在 Excel 中手动使用公式栏一样,然后使用以下命令追加.Characters

Dim rngTestString As Range

Set rngTestString = Range("colour_string")

Range("colour_string").Characters(Len(Range("colour_string").Value) + 1).Text = "red "
rngTestString.Characters(1, 4).Font.Color = RGB(255, 0, 0)

Range("colour_string").Characters(Len(Range("colour_string").Value) + 1).Text = "green "
rngTestString.Characters(5, 10).Font.Color = RGB(0, 255, 0)

Range("colour_string").Characters(Len(Range("colour_string").Value) + 1).Text = "blue"
rngTestString.Characters(11, 14).Font.Color = RGB(0, 0, 255)
于 2012-07-04T15:12:10.793 回答
-1

使用宏在一系列 excel 单元格中设置格式(包括着色)子字符串,请参阅视频:

http://youtu.be/O0h6T5Z7HwY

于 2013-06-22T08:38:19.620 回答