2012-07-04 3 views
6

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: the image in two cells from excel

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?

Odpowiedz

7

Przypisanie .Value nie magicznie rysunek, jak dołączyć do istniejących danych. Usuwa stare dane i umieszcza nowe dane.

Jeśli postacie miały kolorowanie, kolor pierwszego znaku jest używany do pokolorowania nowego ciągu.

Jeśli chce rzeczywistej dołączanie, tak samo jak w przypadku ręcznego z baru wzór w programie Excel, a następnie dodać stosując .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) 
+2

+ 1 ładnie wykonane i wyjaśnił :) –

+0

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? –

+0

@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

-1

formatowanie (włączając barwienie) substrigns w szeregu komórek Excel z makro zobacz wideo:

http://youtu.be/O0h6T5Z7HwY

+2

Należy zauważyć, że odradza się udzielanie jedynie linków (linki mają tendencję do starzenia się w miarę upływu czasu). Proszę rozważyć zredagowanie odpowiedzi i dodanie streszczenia tutaj. – kleopatra

Powiązane problemy