2012-07-04 16 views
6

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

Đố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?

Trả lời

7

Chỉ định .Value không kỳ diệu tìm cách thêm vào dữ liệu hiện có. Nó xóa dữ liệu cũ và đưa vào dữ liệu mới.

Nếu các ký tự có màu, màu của ký tự đầu tiên được sử dụng để tô màu chuỗi mới.

Nếu bạn muốn các phụ thêm thực tế, giống như nếu bạn tự sử dụng thanh công thức trong Excel, sau đó nối sử dụng .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 Nicely Done và giải thích :) –

+0

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

+0

@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

-1

Formatting (bao gồm cả màu) substrigns trong một loạt các tế bào excel với macro , xem video:

http://youtu.be/O0h6T5Z7HwY

+2

Lưu ý rằng các câu trả lời chỉ có liên kết không được khuyến khích (các liên kết có khuynh hướng bị hạn chế theo thời gian). Vui lòng xem xét chỉnh sửa câu trả lời của bạn và thêm bản tóm tắt tại đây. – kleopatra

Các vấn đề liên quan