VBA kodunun Excel'deki alt dizeler için farklı renkler ayarlama yeteneğine dayanan bazı ilginç görselleştirmeler yapıyorum. Bir dize içeren bir hücre için bu sözdizimi, bu rCell.Characters(start,end).Font.Color=SomeColour
Substring Excel'den boyama VBA: neden bazı açık yöntemler çalışmıyor?
gibi çalışır. Uygulamam, dizeleri oluşturur ve yeni değerleri varolan değerlere ekleyerek ve ardından yeni dizenin rengini ayarlayarak renk değerlerini tek adımda ayarlar. Bu işe yaramadı. Tam bir dize ile başlayan ve sonra birden fazla alt dizeleri renklendirme çalışır.
İki basit rutinleri farkı göstermektedir:
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
iki rutinleri aşağıda gösterilen iki farklı sonuçlar neden daha fazla subsegmentli uzun dizeleri için
daha da kötü olduğunu. Excel 2010 kullanıyorum.
Bu benim hatam mı yoksa bir hata mı? VBA'dan dizeleri oluşturmak ve renklendirmek için daha iyi bir yol var mı?
+ 1 Güzel Done ve kesinlikle çalışır, ancak dize concatenate işlevinde bir sınırlama etrafında almak için garip bir yol gibi görünüyor :) –
açıkladı. Bunun kasıtlı olup olmadığını bilen var mı? –
@matt_black İlgili 'Value' özelliği kadar ** bir dize bitiştirme işlevi yoktur. 'Değer = Değer ve 'çubuk'' yalnızca ödevin sağ tarafında birleşimdir. Ödevin sol kısmı için, 'Değer =' foo bar 'ile aynıdır. 'Değer' dizisi, eski değerle başlayıp başlamadığına bakmak için yeni tedarik edilen değeri analiz etmeyi denemeyecektir ve bu nedenle 'eklenmelidir'. Zihninizde sahip olduğunuz şey için, 'Range''in sahip olmadığı varsayımsal bir' AppendText' yöntemine ihtiyacınız olacaktır. Ancak, yukarıdaki kodu kullanarak kendinizi bir tane yazabilirsiniz. – GSerg