Я создал несколько интересных визуализаций, основанных на способности кода 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 2010.
Так это моя вина или это баг? Есть ли лучший способ создавать и раскрашивать строки из VBA?