2017-10-12 87 views
0

我有10个红色的矩形和另一个蓝色的UP - 应该控制它们的颜色。矩形号码1始终为绿色。如果我点击向上矩形,矩形2应该改变颜色为绿色,如果我再次点击向上,矩形3应该改变颜色为绿色,如果我点击9次,所有矩形应该是绿色。我所做的代码只有1步。欢迎任何帮助。谢谢。用另一个矩形的点击改变矩形的颜色excel vba

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 

enter image description here

+0

所以,你实际上开始与一个绿色,9红色和1蓝色?这些形状的顺序是什么? 1绿色,9红色,然后蓝色? – QHarr

+0

另外,尽可能避免由Shape编号引用,因为这可能会很快失去同步。给出形状名称并在循环中引用它们。你可以循环一个包含形状名称的数组。 – QHarr

+0

我添加了一个打印屏幕 – wittman

回答

1

一个简单For Loop将做的工作。

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 
+0

我认为OP可能需要考虑形状的排序,数字不匹配的可能性会更好,并且存在蓝色矩形及其位置(形状编号)的问题。 – QHarr

+0

Shape的标准命名约定是Shape Type + Space + Enumerator'Rectangle 1',您的代码没有空间。尝试改变'Set sh = ActiveSheet.Shapes(“Rectangle”&i)'到'Set sh = ActiveSheet.Shapes(“Rectangle”&i)' – 2017-10-12 11:33:35

+0

HA,我没有看到:D。有用。谢谢。 – wittman