Zbudowałem kilka ciekawych wizualizacji, które opierają się na zdolności VBA do ustawiania różnych kolorów dla podciągów w Excelu. W przypadku komórki zawierającej ciąg składnia działa tak, jak ta: Moja aplikacja tworzy ciągi i ustawia wartości kolorów w jednym kroku, dodając nowe łańcuchy do istniejących wartości, a następnie ustawiając kolor nowego łańcucha. To nie zadziałało. Zaczynając od kompletnego napisu, a następnie kolorując wiele pod-ciągów działa.Kolorowanie podłoŜa z Excela VBA: dlaczego niektóre oczywiste metody nie działają?
Dwa proste procedury zilustrować różnicę:
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
Obie procedury prowadzić w dwóch różnych wyników przedstawionych poniżej:
przypadku dłuższych ciągów z kilku podsegmentów jest jeszcze gorzej. Używam programu Excel 2010.
Czy to moja wina, czy to błąd? Czy istnieje lepszy sposób tworzenia i kolorowania łańcuchów z VBA?
+ 1 ładnie wykonane i wyjaśnił :) –
To oczywiście działa, ale wydaje się niezgrabny sposób poruszania się ograniczenia w funkcjonalności ciąg złączyć. Czy ktoś wie, czy jest to zamierzone, czy nie? –
@matt_black Istnieje ** brak funkcji konkatenacji ciągów ** w odniesieniu do właściwości "Value". 'Wartość = Wartość i" pasek "' to konkatenacja tylko po prawej stronie przypisania. W przypadku lewej części zadania jest ona taka sama jak "Value =" foo bar''. Polecenie "Wartość" nie będzie próbowało analizować nowo dostarczonej wartości, aby sprawdzić, czy zaczyna się od starej wartości, a zatem powinno być "dołączone". Do tego, co masz w głowie, potrzebujesz hipotetycznej metody 'AppendText', której' Range' nie posiada. Ale możesz napisać samemu używając powyższego kodu. – GSerg