Tôi đã xây dựng một số hình ảnh thú vị dựa trên khả năng của mã VBA để thiết lập các màu khác nhau cho các bản chất trong Excel. Đối với ô có chứa chuỗi, cú pháp hoạt động như thế này rCell.Characters(start,end).Font.Color=SomeColour
Màu chuỗi con từ Excel VBA: tại sao một số phương pháp rõ ràng không hoạt động?
Ứng dụng của tôi tạo chuỗi và đặt giá trị màu trong một bước bằng cách thêm chuỗi mới vào giá trị hiện tại và sau đó đặt màu của chuỗi mới. Điều này không hiệu quả. Bắt đầu với một chuỗi hoàn chỉnh và sau đó tô màu nhiều chuỗi phụ thì hoạt động.
Hai thói quen đơn giản minh họa sự khác biệt:
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
Hai thói quen dẫn đến hai kết quả khác nhau hiển thị dưới đây:
Đối với chuỗi dài với nhiều subsegments nó thậm chí còn tồi tệ hơn. Tôi đang sử dụng Excel 2010.
Vì vậy, đây có phải là lỗi của tôi hay là lỗi? Có cách nào tốt hơn để tạo và chuỗi màu từ VBA?
+ 1 Nicely Done và giải thích :) –
Nó chắc chắn hoạt động, nhưng dường như một cách vụng về để có được xung quanh một giới hạn trong các chức năng chuỗi concatenate. Có ai biết liệu điều này có chủ ý hay không? –
@matt_black Có ** không có chức năng nối chuỗi ** theo như thuộc tính 'Giá trị' có liên quan. 'Giá trị = Giá trị &" thanh "' là chỉ nối ở phía bên phải của nhiệm vụ. Đối với phần bên trái của bài tập, nó giống như 'Value = 'foo bar''. Bộ giá trị 'Value' sẽ không cố phân tích giá trị mới được cung cấp để xem nó có bắt đầu bằng giá trị cũ hay không và do đó sẽ được 'nối thêm'. Đối với những gì bạn có trong tâm trí của bạn, bạn sẽ cần một phương pháp 'AppendText' giả định mà' Range' không có. Nhưng bạn có thể tự viết cho mình bằng cách sử dụng mã ở trên. – GSerg