首页 > 解决方案 > 根据单元格值为工作表中的多个形状着色

问题描述

所以我正在尝试编写一个代码来根据单元格值更改多个形状的颜色。

我使用了一种简单的方法,如果我运行代码并且形状名称与单元格中写入的名称匹配,则它会突出显示,否则它会变灰。我有按国家/地区命名的形状名称(基本上形状名称为“中国”、“德国”、“英国”等);我正在使用的代码如下:

Sub Box_Colour()
Dim Shape_Name As String
Shape_Name = ActiveSheet.Range("N8").Value
        ActiveSheets.Shapes(Shape_Name).Fill.ForeColor.RGB = RGB(237, 125, 49)
        ActiveSheets.Shapes(Shape_Name).Fill.ForeColor.RGB = RGB(166, 166, 166)

End Sub

但是我收到错误为“需要对象”;你能帮我解决这个问题吗?

PS - 目前我正在逐张执行此操作,但是有什么方法可以一次为所有工作表运行此代码?就像每张纸上的形状名称一样;所以N8的值是德国表中的“德国”,中国表中的“中国”。也让我知道 :) 在此先感谢!

标签: excelvba

解决方案


循环工作表和每个工作表的Shapes集合:

Sub Box_Colour()
    Dim ws As Worksheet, shp As Shape, nm As String
    For Each ws In ThisWorkbook.Worksheets
        nm = ws.Range("N8").Value
        For Each shp In ws.Shapes
            shp.Fill.ForeColor.RGB = _
               IIf(shp.Name = nm, RGB(237, 125, 49), RGB(166, 166, 166))
        Next shp
    Next ws
End Sub

推荐阅读