通过单击另一个矩形excel vba更改矩形的颜色
我有10个红色的长方形和另一个蓝色的长方形,可以控制它们的颜色。1号矩形始终为绿色。如果我点击向上的矩形,矩形2的颜色将变为绿色,如果我再次点击向上,矩形3的颜色将变为绿色,如果我点击9次,所有的矩形都将变为绿色。我编写的代码只执行了一步。欢迎任何帮助。多谢各位通过单击另一个矩形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
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建议的名称数组。