2017-10-12 8 views
0

色を制御する必要がある赤い四角形と青色のUPを10個持っています。矩形番号1は常に緑です。 UP矩形をクリックすると長方形2が緑色に変わり、UPを再度クリックすると長方形3が緑色に変わり、9回クリックするとすべての長方形が緑色になります。私が作ったコードは1ステップしか進まない。どんな助けも歓迎されます。ありがとうございました。他の矩形からのクリックで四角形の色を変えてください。

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

実際には1つの緑、9赤と1青で開始しますか?これらの形はどのような順序ですか? 1緑、9赤、次に青? – QHarr

+0

また、可能な限りシェイプ番号で参照することは避けてください。できるだけ早く同期が外れる可能性があります。シェイプ名を付けてループで参照してください。シェイプ名を含む配列をループすることができます。 – QHarr

+0

印刷画面を追加しました – wittman

答えて

1

Aは単に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)' –

+0

に変更してみてください。できます。ありがとうございました。 – wittman

関連する問題