我需要知道:如何通过VBA代码获取Excel 2010条件格式的颜色比例所产生的颜色。随后,这些颜色将由VBA根据下图分配为图表背景:
www.lnkm.cz/Slozka/Example.jpg http://www.lnkm.cz/Slozka/Example.jpg
我对各种网站进行了研究,并且:
所以我问:
我相信它必须以某种方式工作。
如果没有提供更好的答案,您可以尝试以下解决方法:
<Cell>.FormatConditions(index that is active).Interior.ColorIndex
这样的公式)=Sheet1!A1
,即空字符串文字(2个双引号))更新:
或者你可以尝试通过线性近似计算每个R,G,B通道的颜色,如果条件格式只使用2种基色(r1,g1,b1)和(r2,g2,b2)2个角情况可以是
""
和min
值,例如:0 - 4 000max
和min
百分比,例如:10% - 90%
(我相信你可以使用%* [max_value - min_value]来获得实际值)max
和min
百分位数,例如:0th百分位数 - 第100百分位数对于百分比/百分位数选项,您首先需要将实际值转换为百分比/百分位值,然后如果max
或value < min
使用角落颜色,否则:
value > max
这会将单元格的图片复制到同一工作表上的图表对象的左上角。请注意,图片链接到复制的单元格 - 如果值或格式颜色更改,它将更改为匹配。
r = r1 + (r2 - r1) * (value - min_value) / (max_value - min_value)
g = ...
b = ...
编辑:我刚用一个相当小的4x8单元格/图表矩阵进行测试,性能非常差!可以更好地粘贴没有链接:=真......
这不是特定于您的问题,但很容易修改,以解决您的问题...
Sub Tester()
CopyLinkedPicToPlot ActiveSheet.Range("E4"), "Chart 2"
End Sub
Sub CopyLinkedPicToPlot(rngCopy As Range, chtName As String)
Dim cht As ChartObject
Set cht = ActiveSheet.ChartObjects(chtName)
rngCopy.Copy
With rngCopy.Parent.Pictures.Paste(Link:=True)
.Top = cht.Top
.Left = cht.Left
End With
End Sub
试试这个:
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
这应该在2010年之后用Excel表示。
根据JKirchartz的回答,这对我有用
<Cell>.DisplayFormat.Interior.Color
这是对您的问题的部分答案。下表的第1列列出了Excel的标准40种颜色。第2,3和4列列出了每种颜色的红色,绿色和蓝色成分。因此,如果您希望单元格的字体为浅橙色:
Sub copyBackgroundColors(source As Range, target As Range)
target.Interior.color = source.DisplayFormat.Interior.color
End Sub
如果您尝试任何其他红绿组合,Excel将匹配这些标准颜色中最接近的一种,尽管Excel的“最近”的想法与我的不匹配。
希望如果您回答问题的其他部分,这会有所帮助。
Cell(Row, Column).Font.Color = RGB(255, 153, 0)