문제

가드를 VBA 코드에서 공개적으로 색상을 설정하려고합니다.일반적으로, 나는 사용할 수 있습니다 :

Dim BLUE As Long
BLUE = RGB(183, 222, 232)
.

그러나 RGB 기능으로 인해 공개 할 수있는 방법은 없습니다.온라인 변환기를 사용 하여이 RGB 값을 16 진수로 변환했으며 B7Dee8 를 뒷받침했습니다.

사용 :

BLUE = &HB7DEE8
.

은 완전히 다른 색상을 가져옵니다.나는 이것이 실제로 RGBA 색상이 될 수 있다고 생각하며, 나는 b7dee8__을 시도했고, 마지막 자리가 B8의 마지막 숫자와 함께 꽤 닫힌 색을 얻었지만, 실제로 정확한 값을 찾는 방법을 알고 싶습니다.

참고 : 나는 이것을 헥스 셀러에 변환하는 코드가 실제로 필요하지 않습니다. 나는 엑셀 시트에서 사용하는 다섯 가지 일정한 색상이 있기 때문에 그것을 찾는 방법을 알아야합니다..

도움이 되었습니까?

해결책

바이트를 순서대로 뒤집어야합니다

BLUE = &HE8DEB7
.

올바른 색상 값을 얻으십시오.

다른 팁

명백한 반전의 이유는 RGB () 함수가 실제로 BGR 값을 생성한다는 것입니다.

더 구체적으로, 적색 바이트는 낮은 순서 바이트이고, 파란색 바이트는 상위 순으로 바이트 (적어도 4의 세 번째)입니다.

즉각적인 창 에서이 예제를 시도하십시오.

x = RGB(255, 0, 128) ' full red, half blue
? hex(x)
8000FF

x = RGB(128, 0, 255) ' half red, full blue
? hex(x)
FF0080
.

"Full"바이트 (255 또는 FF)와 "half-full"바이트 (128 또는 80)는 각 결과에서 반대쪽에 끝납니다. 그래서 당신이 같은 가치를 얻을 것으로 기대할 것으로 예상되는 역순으로 육각 상수를 지정 해야하는 이유입니다.

또한 온라인 변환기를 사용할 필요가 없습니다. 16 진수 () 함수는 주어진 숫자의 16 진수 값을 제공하며 int는 16 진수 형식으로 문자열을 사용하고 10 진수 값을 반환합니다.

? Int("&hff0000") 
 16711680
.

업데이트 :

이 정보를 사용하여 Hex 상수를 만들려면 위와 같이 즉석 창에서 RGB () 및 HEX () 명령문을 실행하면 (Ctrl + G를 열고 닫으려면 Ctrl + G를 입력하십시오) 결과는 결과 16 진수 값을 사용하십시오. 당신의 일정으로. 값이 6 자리 미만이면 왼쪽에 0으로 패드 할 수 있지만 기술적으로 필요하지 않습니다.

x = RGB(183, 222, 232)
? "Public Const MyBlue = &h" & hex(x)
Public Const MyBlue = &hE8DEB7
.

그런 다음 마지막 줄을 코드에 복사하십시오.

확인을 사용하면 Excel 2010에서 셀의 색상을 사용하고 유효한 HexCode를 제공합니다.

Public Function getHexCol(a As Range)

' In excel type in for example getHexCol(A1) to get the hexcode of the color on     A1.
Dim strColour As String
Dim hexColour As String
Dim nColour As Long
Dim nR As Long, nB As Long, nG As Long

strColour = a.Interior.Color
If Len(strColour) = 0 Then Exit Function

nColour = Val(strColour) ' convert string to decimal number
hexColour = Hex(nColour) ' convert decimal number to hex string
While Len(hexColour) < 6 ' pad on left to 6 hex digits
hexColour = "0" & hexColour
Wend

nB = CLng("&H" & Mid(hexColour, 1, 2))
nG = CLng("&H" & Mid(hexColour, 3, 2))
nR = CLng("&H" & Mid(hexColour, 5, 2))

getHexCol = Hex(RGB(nB, nG, nR))
End Function
.

Function GetRGB(ByVal cell As Range) As String

Dim R As String, G As String
Dim b As String, hexColor As String
hexCode = Hex(cell.Interior.Color)

'Note the order excel uses for hex is BGR.
b = Val("&H" & Mid(hexCode, 1, 2))
G = Val("&H" & Mid(hexCode, 3, 2))
R = Val("&H" & Mid(hexCode, 5, 2))

GetRGB = R & ":" & G & ":" & b
End Function
.

Excel RGB 값은 뒤로 (BGR)

나는이 코드를 테스트하고, 하워드의 대답을 실제로 따라갈 수있다

Dim rd, gr, bl As Integer
rd = 183
gr = 222
bl = 232
BLUE = RGB(rd, gr, bl)
hexclr = Format(CStr(Hex(rd)), "00") +
Format(CStr(Hex(gr)), "00") + 
Format(CStr(Hex(bl)), "00")
MsgBox hexclr 'B7DEE8
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top