2014-06-10 14 views
8

Tôi đã cố gắng thay đổi dần màu nền của ô thành màu đen và tôi nhận thấy phương thức Range.Interior.Color trả về giá trị Long là dường như tùy ý. Nhìn vào tài liệu hướng dẫn trên MSDN, gần như không có gì về những gì con số này đại diện. Có cách nào để trả lại giá trị RGB từ lâu không. Tôi thực sự cần đối diện với chức năng RGB (đỏ, lục, lam).Trả về giá trị RGB từ Range.Interior.Color (hoặc bất kỳ Thuộc tính Màu nào khác)

Trả lời

12

ngắn Trả lời:

Không có được xây dựng trong chức năng cho việc này. Bạn phải viết chức năng của riêng bạn.

dài trả lời:

Các dài được trả về từ thuộc tính Interior.Color là một chuyển đổi số thập phân của số hexidecimal điển hình mà chúng ta thường thấy cho màu sắc trong html ví dụ "66FF66". Ngoài ra, hằng số xlNone (-4142) có thể được truyền tới ô thiết lập để không có màu nền, tuy nhiên các ô đó được đánh dấu màu trắng là RGB(255, 255, 255) từ thuộc tính Get. Biết được điều này, chúng ta có thể viết một hàm trả về một hoặc tất cả các giá trị RGB thích hợp.

May mắn thay, một loại ông Allan Wyatt đã làm điều đó ở đây!

Determining the RGB Value of a Color

26

That "tùy ý" số là sự kết hợp toán học của các giá trị RGB (R * 256^2 + G * 256 + B) và chuyển đổi giá trị hex màu sắc cho một số thập phân (cơ sở 16 đến căn cứ 10), tùy thuộc vào cách bạn muốn xem. Chỉ các căn cứ khác nhau. Dưới đây là phương pháp tôi sử dụng trong tệp add-in XLAM mà tôi đã viết cho Excel. Phương pháp này có ích nhiều lần. Tôi đã bao gồm các tài liệu trong tập tin addin của tôi.

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
' Function   Color 
' Purpose    Determine the Background Color Of a Cell 
' @Param rng   Range to Determine Background Color of 
' @Param formatType Default Value = 0 
'      0 Integer 
'      1 Hex 
'      2 RGB 
'      3 Excel Color Index 
' Usage    Color(A1)  --> 9507341 
'      Color(A1, 0) --> 9507341 
'      Color(A1, 1) --> 91120D 
'      Color(A1, 2) --> 13, 18, 145 
'      Color(A1, 3) --> 6 
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
Function Color(rng As Range, Optional formatType As Integer = 0)  As Variant 
    Dim colorVal As Variant 
    colorVal = Cells(rng.Row, rng.Column).Interior.Color 
    Select Case formatType 
     Case 1 
      Color = Hex(colorVal) 
     Case 2 
      Color = (colorVal Mod 256) & ", " & ((colorVal \ 256) Mod 256) & ", " & (colorVal \ 65536) 
     Case 3 
      Color = Cells(rng.Row, rng.Column).Interior.ColorIndex 
     Case Else 
      Color = colorVal 
    End Select 
End Function 
10

tốt để thấy rằng ông Wyatt sử dụng phương pháp nhanh chóng của màu RGB

R = C Mod 256 
G = C \ 256 Mod 256 
B = C \ 65536 Mod 256 

mà là nhiều lần nhanh hơn so với những người sử dụng hex str với trái giữa đúng rằng một số đề nghị

2

Câu trả lời khác không hiệu quả với tôi. Tôi thấy rằng:

R = C And 255 
G = C \ 256 And 255 
B = C \ 256^2 And 255 

và hoạt động bình thường.

+0

Bạn và cả Harry đều làm việc. F.i. Giá trị màu đỏ của 'RGB (50,100,200) = RGB (50,100,200) Mod 256' và giá trị đỏ của 'RGB (50,100,200) = RGB (50,100,200) Và 255' – Mill

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