2017-10-12 1 views
0

색상을 제어해야하는 빨간색 직사각형 10 개와 파란색 1 개 - UP가 있습니다. 사각형 번호 1은 항상 녹색입니다. UP 사각형을 클릭하면 사각형 2의 색이 녹색으로 바뀌고 UP을 다시 클릭하면 사각형 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 

enter image description here

+0

실제로 초록색 9 개, 파란색 1 개로 시작 하시겠습니까? 이 도형들은 어떤 순서입니까? 녹색 1 개, 빨간색 9 개, 파란색 1 개? – 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

HA로 변경해보십시오. 그걸 보지 못했습니다 : D. 그것은 작동합니다. 고맙습니다. – wittman

관련 문제