【问题标题】:Match shape colour to cell color - vba将形状颜色与单元格颜色匹配 - vba
【发布时间】:2018-06-02 21:35:48
【问题描述】:

我希望设置一个基本循环来设置工作表中每个形状的颜色以匹配表格中的相应单元格(条件格式)。

我有以下

dim countryShape as shape

For Each countryShape In ActiveSheet.Shapes

countryShape.Range.Interior.Color = Application.VLookup(countryShape.Name, ActiveSheet.Range("D3:H19"), 2, 0).Interior.Color

Next countryShape

但是,我得到了一个

运行时错误 424,“需要对象”

我猜这与颜色应用的格式有关(即 .interior.color 用于单元格,.fill.forecolor 用于形状)但是到目前为止我尝试过的任何组合都还没有奏效。

【问题讨论】:

    标签: vba excel colors shape


    【解决方案1】:

    要更改形状的颜色,您需要更改 Fill.ForeColor 属性。您也不能使用 Vlookup,因为它会返回单元格值而不是单元格颜色。

    请尝试这样...

    Dim countryShape As Shape
    Dim ColorCell As Range
    For Each countryShape In ActiveSheet.Shapes
        Set ColorCell = Range("D3:D19").Find(what:=countryShape.Name, lookat:=xlWhole)
        If Not ColorCell Is Nothing Then
            'get the shape color from corresponding cell in column E
            countryShape.Fill.ForeColor.RGB = ColorCell.Offset(0, 1).Interior.Color 
        End If
    Next countryShape
    

    【讨论】:

    • 啊,除了我没有提到的东西之外,这非常有效。表格中的单元格根据条件格式着色。有什么方法可以传输格式颜色(鉴于它在技术上不算作单元格颜色?)(赞成大量帮助)
    • 啊,我找到了解决方案。使用 colorcell.DISPLAYFORMAT.interior.color。非常感谢您的帮助先生!
    • @IIJHFII 不客气!很高兴你正确地调整了它。
    • 这真的很有帮助。谢谢你们。
    【解决方案2】:

    给你:

    Public Sub TestMe()
    
        Dim shp         As Shape
        Dim fancyCell   As Range
    
        Dim colorR      As Long
        Dim colorG      As Long
        Dim colorB      As Long
        Dim colorFancy  As Long
    
        Set fancyCell = Range("A1")
        colorFancy = fancyCell.Interior.Color
    
        colorR = colorFancy And 255
        colorG = colorFancy \ 256 And 255
        colorB = colorFancy \ 256 ^ 2 And 255
    
        For Each shp In ActiveSheet.Shapes
            shp.Fill.ForeColor.RGB = RGB(colorR, colorG, colorB)
        Next shp
    
    End Sub
    

    形状需要 RGB 颜色,因此您可以给它,从单元格中获取颜色。 RGB() 返回相同的Long,在Range.Interior.Color 中使用,因此您也可以简单地使用: shp.Fill.ForeColor.RGB = colorFancy.Interior.Color

    正如@sktneer 的回答所建议的那样。

    【讨论】:

      猜你喜欢
      • 2019-09-06
      • 1970-01-01
      • 2016-10-06
      • 2019-05-17
      • 2015-06-18
      • 1970-01-01
      • 2016-08-12
      • 1970-01-01
      • 2021-06-13
      相关资源
      最近更新 更多