从Excel VBA子string着色:为什么一些明显的方法不起作用?

我一直在构build一些有趣的可视化,这些可视化依赖于VBA代码为Excel中的子string设置不同颜色的能力。 对于包含string的单元格,其语法如下所示: rCell.Characters(start,end).Font.Color=SomeColour

我的应用程序构buildstring,并通过将新string附加到现有值上,然后设置新string的颜色,在一个步骤中设置颜色值。 这没有奏效。 从一个完整的string开始,然后着色多个子string行不通的。

两个简单的例程说明不同之处:

  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中的两个单元格中的图像

对于更多的子段更长的string更糟糕。 我正在使用Excel 2010。

那么这是我的错还是错误? 有没有更好的方法来创build和VBA颜色的string?

赋值.Value并不奇迹般地显示如何附加到现有的数据。 它擦除旧数据并放入新数据。

如果字符有着色,则使用第一个字符的颜色对新string进行着色。

如果你想要的实际追加,就像你在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) 

使用macros格式化(包括着色)子范围的excel单元格,请参阅video:

http://youtu.be/O0h6T5Z7HwY