2015-11-02 127 views
3

我需要帮助编码这个VBA的工作项目的帮助。我有一个包含所有形状(状态)的地图,我有列U2:U52与州缩写和列V2:V52与数据。我需要一个宏来运行“If Then”语句来更改颜色,并根据输入的数据循环遍历每个状态(数据行)。宏改变地图颜色(国家)

Sub map1() 

Dim Rng As Range 
Dim ShapeName As String 
Dim SHP As Shape 

ShapeName = "AL" 

Set Rng = ThisWorkbook.Worksheets("Sheet1").Range("V2") 
Set SHP = Rng.Parent.Shapes(ShapeName) 


If Rng.Value <= 1.6 Then 
SHP.Fill.ForeColor.RGB = RGB(255, 0, 0) 'Red 

End If 

If Rng.Value > 1.6 And Rng.Value < 2.4 Then 
SHP.Fill.ForeColor.RGB = RGB(0, 255, 0) 'Green 

End If 

If Rng.Value >= 2.4 Then 
SHP.Fill.ForeColor.RGB = RGB(255, 255, 0) 'yellow 

End If 

End Sub 

它的书写方式只适用于一种形状,如何将其更改为运行所有状态而无需编码它52次?

回答

1

这是一个应该工作的简单循环。

Sub map1() 

Dim Rng As Range 
Dim ShapeName As String 
Dim SHP As Shape 

For i = 2 to 52 

    ShapeName = ThisWorkbook.Worksheets("Sheet1").Range("U" & i).Value 

    Set Rng = ThisWorkbook.Worksheets("Sheet1").Range("V" & i) 
    Set SHP = Rng.Parent.Shapes(ShapeName) 

    If Rng.Value <= 1.6 Then 
     SHP.Fill.ForeColor.RGB = RGB(255, 0, 0) 'Red 
    ElseIf Rng.Value > 1.6 And Rng.Value < 2.4 Then 
     SHP.Fill.ForeColor.RGB = RGB(0, 255, 0) 'Green 
    ElseIf Rng.Value >= 2.4 Then 
     SHP.Fill.ForeColor.RGB = RGB(255, 255, 0) 'yellow 
    End If 
Next i 

End Sub 
+1

耶!这工作!谢谢! – Liz