通过单击另一个矩形excel vba更改矩形的颜色

通过单击另一个矩形excel vba更改矩形的颜色,vba,excel,Vba,Excel,我有10个红色的长方形和另一个蓝色的长方形,可以控制它们的颜色。1号矩形始终为绿色。如果我点击向上的矩形,矩形2的颜色将变为绿色,如果我再次点击向上,矩形3的颜色将变为绿色,如果我点击9次,所有的矩形都将变为绿色。我编写的代码只执行了一步。欢迎任何帮助。多谢各位 public i as long Sub test() Dim x As Long, y As Long i = 2 ActiveSheet.Shapes.Range(Array("Rectangle " & i)).S

我有10个红色的长方形和另一个蓝色的长方形,可以控制它们的颜色。1号矩形始终为绿色。如果我点击向上的矩形,矩形2的颜色将变为绿色,如果我再次点击向上,矩形3的颜色将变为绿色,如果我点击9次,所有的矩形都将变为绿色。我编写的代码只执行了一步。欢迎任何帮助。多谢各位

public i as long
Sub test()
Dim x As Long, y As Long
i = 2
    ActiveSheet.Shapes.Range(Array("Rectangle " & i)).Select
    Selection.ShapeRange.Fill.ForeColor.RGB = RGB(0, 240, 0)
i = i + 1

   Debug.Print i

End Sub

一个简单的
For循环
就可以了

Sub test()
    Dim sh As Shape
    Dim i As Long
    For i = 2 To 10
        On Error Resume Next
        Set sh = ActiveSheet.Shapes("Rectangle " & i)
        On Error GoTo 0

        If Not sh Is Nothing Then
            If sh.Fill.ForeColor.RGB <> RGB(0, 240, 0) Then
                sh.Fill.ForeColor.RGB = RGB(0, 240, 0)
                Exit For
            End If
        End If
    Next
End Sub

Sub Test2()
    Dim sh As Shape
    Dim v As Variant

    For Each v In Array("Rectangle 2", "Rectangle 3", "Rectangle 4", "Rectangle 5", "Rectangle 6", "Rectangle 7", "Rectangle 8", "Rectangle 9", "Rectangle 10")
        On Error Resume Next
        Set sh = ActiveSheet.Shapes(v)
        On Error GoTo 0

        If Not sh Is Nothing Then
            If sh.Fill.ForeColor.RGB <> RGB(0, 240, 0) Then
                sh.Fill.ForeColor.RGB = RGB(0, 240, 0)
                Exit For
            End If
        End If
    Next
End Sub
子测试()
像形状一样暗淡
我想我会坚持多久
对于i=2到10
出错时继续下一步
设置sh=ActiveSheet.Shapes(“矩形”和i)
错误转到0
如果不是的话,那就什么都不是了
如果sh.Fill.ForeColor.RGB RGB(0,240,0),则
sh.Fill.ForeColor.RGB=RGB(0,240,0)
退出
如果结束
如果结束
下一个
端接头
子测试2()
像形状一样暗淡
Dim v作为变体
对于数组中的每个v(“矩形2”、“矩形3”、“矩形4”、“矩形5”、“矩形6”、“矩形7”、“矩形8”、“矩形9”、“矩形10”)
出错时继续下一步
设置sh=ActiveSheet.Shapes(v)
错误转到0
如果不是的话,那就什么都不是了
如果sh.Fill.ForeColor.RGB RGB(0,240,0),则
sh.Fill.ForeColor.RGB=RGB(0,240,0)
退出
如果结束
如果结束
下一个
端接头

那么您实际上是从一个绿色、9个红色和1个蓝色开始的?这些形状的顺序是什么?1个绿色,9个红色,然后是蓝色?另外,尽可能避免按形状编号引用,因为这可能会很快失去同步。给出形状名称并在循环中引用它们。你可以循环一个包含形状名称的数组。我添加了一个打印屏幕。你有9个蓝色,2个绿色和1个红色。我假设“向上”按钮应该是蓝色或绿色的,但不作任何更改。我进一步假设Down是红色的,不需要更改。因此,你要考虑10种形状,其中1种是绿色的,另一种是九种红色的,然后是绿色的,或者是蓝色的,然后是绿色的。在应用正确的更改之前,您需要清楚这些内容。此外,这些形状是如何编号的,这种编号是静态的,即最底部总是矩形1等?我更喜欢使用命名形状来避免任何形状编号所引用的问题。我认为OP可能需要考虑形状的顺序,数字不匹配的可能性,因此名称更佳,存在蓝色矩形及其位置(形状号)的问题。。形状的标准命名约定为形状类型+空格+枚举数
矩形1
,您的代码没有空格。尝试将
Set sh=ActiveSheet.Shapes(“矩形”和i)
更改为
Set sh=ActiveSheet.Shapes(“矩形”)和i)
i使用正确的命名约定更新了我的答案。我还添加了一个子例程,它允许您迭代@QHarr建议的名称数组。