我想設置以下方式的橙色的顏色:設置顏色以十六進制和十進制表現不同
WorkSheet.Range("A1:A5").Interior.color = 49407
和
WorkSheet.Range("A1:A5").Interior.color = &HC0FF 'Hex value of 49407
是不是這兩個應該是完全等同? 設置的顏色不同。
我想設置以下方式的橙色的顏色:設置顏色以十六進制和十進制表現不同
WorkSheet.Range("A1:A5").Interior.color = 49407
和
WorkSheet.Range("A1:A5").Interior.color = &HC0FF 'Hex value of 49407
是不是這兩個應該是完全等同? 設置的顏色不同。
沒有,這些值是不相等的:&HC0FF
是-16129,而&HC0FF&
是49407.
VBA是一種相當古老的語言,默認情況下使用16位整數。在這個時代,你幾乎總是想要longs而不是整數,但你必須爲他們問VBA。
&HC0FF
是一種構造,它從十六進制定義了一個16位常量。由於該值中的符號位在解釋爲16位值時設置(開,負),因此轉換爲-16129。我們可能會認爲這很糟糕,但這不是一個錯誤!當使用-16129(作爲有符號整數)時,以32位形式,1傳播到整個前16位,結果藍色值爲255.
你真正想要的是32位十六進制常數:&HC0FF&
。 最後的額外&
告訴VBA,這是一個長常量,而不是int。以32位解釋,這是一個正值,所以給出了您要查找的十進制等值。
總之,要求長的十六進制常量與尾隨&
。另外,當使用十進制常量時,例如在表達式16000 * 16000中,這會溢出16位算術,這種VBA趨向於16位的傾向也會咬我們。所以,有時候也需要在十進制常量上使用尾隨&
(或者先分配一個)。
顏色代碼通常由三個值組成,紅色,綠色,藍色。您的Hexcode缺少三者之一,而且excel使用FF自動填充它。所以你的顏色C0FF被轉換成FFC0FF。
這裏是一個Exampleprogram,所以你可以看到它的實際操作,創建一個新的工作表並執行它。
' C0FF will be changed to be FFC0FF
Range("A1").Interior.Color = &HC0FF
Range("A1").Select
ActiveCell.FormulaR1C1 = Range("A1").Interior.Color
Range("A2").Select
ActiveCell.FormulaR1C1 = "=DEC2HEX(R[-1]C,6)"
' 49407 is actually 00C0FF
Range("B1").Interior.Color = 49407
Range("B1").Select
ActiveCell.FormulaR1C1 = Range("B1").Interior.Color
Range("B2").Select
ActiveCell.FormulaR1C1 = "=DEC2HEX(R[-1]C,6)"
' Use RGB to have better control over your results
' Switch the order when doing so: 00C0FF => 00 Blue C0 Green FF Red
Range("C1").Interior.Color = RGB(&HFF, &HC0, &H0)
Range("C1").Select
ActiveCell.FormulaR1C1 = Range("C1").Interior.Color
Range("C2").Select
ActiveCell.FormulaR1C1 = "=DEC2HEX(R[-1]C,6)"
編輯:增加了第三個例子來說明切換顏色的建議在不同的答案。
這清除了很多。謝謝!我已經切換到分別指定RGB值,但我想知道是否有可能讓excel直接將它讀作'00C0FF'? –
我相信Gimp和Johannes的答案都錯過了關鍵問題。
計算機屏幕上的顏色是通過指定您需要多少紅色,藍色和綠色來定義的。對於三種顏色中的每一種,您指定一個介於0和255之間的數字。這三個數字通常通過連接三個單獨的數字來指定爲單個數字。使用Html,您可以指定一種顏色爲#RRGGBB,其中RR,GG和BB是十六進制數字,或者您可以將RRBBGG替換爲十進制等效值。用Excel的順序是顛倒的,所以& HBBGGRR或十進制等效。
49407是00C0FF的十進制等效其用於Excel意味着藍= 0,綠色= 192和紅色= 255
但是& HC0FF或& H00C0FF是-16129或藍= 255,綠色= 192和紅= 255.這似乎是H轉換中的一個缺陷。我找不到反正越來越C0FF轉化爲49407.
如果您堅持使用& H換算,我能提供的最好的是:
Range("A1:A5").Interior.color = &H01C0FF
這是藍= 1,綠色= 192和紅= 255,我不能告訴從藍色= 0,綠色= 192和紅色= 255
的差異,但我會建議:
Range("A1:A5").Interior.color = RGB(255,192,0)
因爲RGB功能總是返回一個正數,你不必擔心Excel的反序。
很好的答案,謝謝,這讓我瘋狂! – Sergio
是的,你不能跳過前面的0 ......關於int大小的答案很酷,但這非常實用,答案爲 –
這將轉換你必須到辦公室使用的RGB顏色的RGB龍十六進制格式的顏色:
Function HexToLongRGB(sHexVal As String) As Long
Dim lRed As Long
Dim lGreen As Long
Dim lBlue As Long
lRed = CLng("&H" & Left$(sHexVal, 2))
lGreen = CLng("&H" & Mid$(sHexVal, 3, 2))
lBlue = CLng("&H" & Right$(sHexVal, 2))
HexToLongRGB = RGB(lRed, lGreen, lBlue)
End Function
+1,也允許從f.ex複製十六進制值。 Photoshop或一個顏色選擇器直接進入數據庫表。 –
太棒了!正是我在找什麼。 –
令人驚歎的答案。 我看到了負面的差異,但不知道爲什麼它會發生,直到我看到你的答案。非常豐富! – danielpiestrak