2012-03-19 27 views
8

我需要知道的內容:如何通過VBA代碼獲取Excel 2010的條件格式的顏色比例的顏色。這些顏色會由VBA根據下面的圖片隨後被分配爲圖表背景:如何獲取Excel 2012的條件格式的顏色比例,通過VBA代碼

www.lnkm.cz/Slozka/Example.jpg http://www.lnkm.cz/Slozka/Example.jpg

我做了各種網頁邊的研究和:

  1. 大多數人的意見如何閱讀的顏色條件格式的方法 <Cell>.FormatConditions(index that is active).Interior.ColorIndex 但在我的情況下,它不工作,因爲錯誤「對象不支持此屬性或方法」
  2. 有些人建議編寫自己的computat顏色離子(基於單元值)。我發現如何做到這一點的各種方法,但沒有一個可以計算excel之前計算出的相同顏色(與以前的圖片顏色相同)。

所以我問:

  1. 有什麼辦法可以直接準備好顏色的細胞? (或者那些顏色不適用於API)
  2. 您是否知道如何計算與excel計算相同的顏色?
  3. 你知道任何其他方式如何解決我的問題?

我相信它必須以某種方式工作。

+1

你有一個特定的代碼示例,你正在嘗試通過?不完全清楚你想要做什麼。很容易從像oSheet.Range(「A1」),Interior.Color或oSheet.Range(「A1」),Interior.ColorIndex這樣的單元格中讀取顏色。也許在代碼中還有一些其他的bug,我們可以幫忙。 – transistor1 2012-03-19 16:14:57

+0

對於第一點的'對象'錯誤,您需要先將單元格設置爲某個東西。直接引用它(例如'ActiveSheet.Range(「A1」)>。FormatConditions(SomeVariable).Interior.ColorIndex')或'SET'作爲變量(例如'Set MyCell = ActiveSheet.Range(「A1」)) ') – Gaffi 2012-03-19 19:41:37

+0

嗨加菲,謝謝你的回覆,但我已經做到了。我通過各種方式(SET功能,選定的單元格等)設置了各種單元格。我把後面的.FormatConditions(SomeVariable)其他命令已經工作了。所以我認爲「FormatConditions」不知道「內部」 – Jure 2012-03-19 21:56:59

回答

4

如果沒有提供更好的答案,你可以嘗試以下解決方法:

  1. 鏈接/複製數據到細胞中的圖表下(與像=Sheet1!A1公式)
  2. 應用相同的條件格式
  3. 隱藏值(使用自定義數字格式,如"",即空字符串文字(2個引號))
  4. 使圖表透明
  5. 對齊單元格與圖表

UPDATE

,或者你可以嘗試計算顏色對於每個R,G,B通道,如果條件格式僅使用2個基色(r1,g1,b1)和(r2,g2,b2),則可以通過線性逼近2個角落案例,其可以是

  • minmax,如:0 - 4 000
  • minmax%的,例如:10% - 90%
    (我相信你可以使用%* [MAX_VALUE - MIN_VALUE]獲得實際值)
  • minmax百分,如:第0個百分點 - 第100個百分

%的/百分點選項,你首先需要一個實際的值轉換爲百分比/百分位值,那麼如果value < minvalue > max使用角上的顏色,否則:

r = r1 + (r2 - r1) * (value - min_value)/(max_value - min_value) 
g = ... 
b = ... 
+0

嗨死亡四月,好主意,但我簡化了我的問題的解釋。事實上,我需要在每個圖表的每個左上角添加小條矩形(以excel術語形式),並使用條件合併的顏色及其值。如果它是圖表的背景,那麼觀察深紫色情況下的圖表點就變得不可能。但你的想法是靈感。 – Jure 2012-03-19 21:44:10

+0

如果你的圖表是白色,除了左上角形狀中的小矩形區域......但不是,它不會用於檢索'它的值':( – Aprillion 2012-03-19 21:50:23

+0

我更新了我的答案,但計算只是我的教育猜測,我沒有excel在這裏測試它.. – Aprillion 2012-03-19 22:11:05

-1

這是您的問題的部分答案。下表中列1列出了Excel的標準40種顏色。第2,3和4列列出了每種顏色的紅色,綠色和藍色成分。所以,如果你想有一個單元格的字體是淺橙色:

Cell(Row, Column).Font.Color = RGB(255, 153, 0) 

如果你嘗試任何其他紅綠結合,Excel將匹配到雖然Excel的想法「最近」做這些標準顏色最接近的一個不符合我的。

希望這可以幫助您解決問題的其他部分。

Colour    Red Green Blue 
Black     0  0  0 
Light orange   255 153  0 
Lime     153 204  0 
Gold     255 204  0 
Bright green   0 255  0 
Yellow    255 255  0 
Grey 80%    51  51  51 
Dark teal    0  51 102 
Plum     153  51 102 
Sea green    51 153 102 
Dark blue    0  0 128 
Dark red    128  0  0 
Violet    128  0 128 
Teal     0 128 128 
Grey 50%    128 128 128 
Grey 40%    150 150 150 
Indigo     51  51 153 
Blue-grey    102 102 153 
Tan     255 204 153 
Light yellow   255 255 153 
Grey 25%    192 192 192 
Aqua     51 204 204 
Red     255  0  0 
Rose     255 153 204 
Light green   204 255 204 
Blue     0  0 255 
Pink     255  0 255 
Light blue    51 102 255 
Lavender    204 153 255 
Sky blue    0 204 255 
Pale blue    153 204 255 
Turquoise    0 255 255 
Light turquoise  204 255 255 
Dark green    0  51  0 
White     255 255 255 
Olive green   51  51  0 
Brown     153  51  0 
Orange    255 102  0 
Green     0 128  0 
Dark yellow   128 128  0 
+1

我認爲Excel 2007比以前的版本更不易於將顏色捕捉到調色板。例如:請參閱http://www.databison.com/index.php/excel-color-palette-and-color-index-change-using-vba/ – 2012-03-20 04:54:02

+0

@Tim。感謝您的信息,我將不得不嘗試。我進行了七八年前導致上述列表的實驗,我從來沒有理由重新考慮它。由於我非常小心地堅持這個列表,所以我沒有注意到Excel 2007在處理顏色方面比2003年更好。總是很好學習新的東西。我也很高興現在可以在互聯網上找到Excel的顏色列表;當我需要它時,我找不到任何類似的東西。 – 2012-03-20 09:15:13

+0

@Tony你在哪裏找到這份清單?資源? – 2014-10-22 23:25:41

2

這將複製單元格的圖片進入同一張工作表上的圖表對象的左上角。請注意,圖片已鏈接到複製的單元格 - 如果值或格式化顏色發生更改,它將更改爲匹配。編輯:我剛剛測試了一個相當小的4×8矩陣的單元格/圖表和性能是非常糟糕的!可能會更好只是沒有粘貼鏈接:=真...

+0

我試過這個解決方案,但是性能有問題,爲了達到我的目的,我需要改變名稱爲「NPHR」的參數(在前面的圖片上是橙色的),觀察「紫色區域」的變化和「圖表組」(excel文件有90 MB),一個參數NPHR的變化需要0.5s秒,而「紫色格式區域」則需要2.5s。 「一組圖表」一旦我只複製一個單元格作爲yoiu的建議,它需要cca 6秒鐘,我認爲它對於所有必要的單元格來說肯定會很慢。 – Jure 2012-03-20 10:09:32

2

這不是針對你的問題,但很容易修改,以解決您的問題...

Sub CopyCondFill() 
    Dim FromSheet As Object 
    Dim ToSheet As Object 
    Dim FromSheetName as String 
    Dim ToSheetName as String 
    Dim ToRange As Range 
    Dim StrRange As String 

    '''Sheet with formatting you want to copy 
    FromSheetName = "YourSheetsName" 
    Set FromSheet = Application.ThisWorkbook.Sheets(FromSheetName) 
     '''Start of range within sheet you want to copy 
     FromFirstRow = 3 
     FromFirstCol = 2 

    '''Sheet you want to copy formatting to 
    ToSheetName = "YourSheetsName" 
    Set ToSheet = Application.ThisWorkbook.Sheets(ToSheetName) 
     '''range to copy formatting to 
     ToFirstRow = 3 
     ToFirstCol = 2 
     '''NOTE: Adjust row/column to take lastrow/lastcol from or enter value manually 
     ToLastRow = FromSheet.Cells(Rows.Count, 1).End(xlUp).Row 
     ToLastCol = FromSheet.Cells(2, Columns.Count).End(xlToLeft).Column 
     Set ToRange = ToSheet.Range(Cells(ToFirstRow, ToFirstCol), Cells(ToLastRow, ToLastCol)) 

     '''Apply formatting to range 
     For Each cell In ToRange 
      StrRange = cell.Address(0, 0) 
      ToSheet.Range(StrRange).Offset(ToFirstRow - FromFirstRow, ToFirstCol - FromFirstCol).Interior.Color = _ 
       FromSheet.Range(StrRange).DisplayFormat.Interior.Color 
     Next cell 

End Sub 
0

這爲我工作的基礎上, JKirchartz

的答案
Sub copyBackgroundColors(source As Range, target As Range) 
    target.Interior.color = source.DisplayFormat.Interior.color 
End Sub 
1

試試這個:

<Cell>.DisplayFormat.Interior.Color 

這應該用這個詞Excel更高於2010年

相關問題