从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
这两个例程导致了两个不同的结果如下所示:
对于更多的子段更长的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: