Select 案例-无环纹系列

Select Case - Loop patternless series

With nGameSlide
.Shapes("Oval 23").Fill.ForeColor.RGB = RGB(255, 192, 0)
.Shapes("Oval 39").Fill.ForeColor.RGB = RGB(255, 192, 0)
.Shapes("Oval 61").Fill.ForeColor.RGB = RGB(255, 192, 0)
.Shapes("Oval 72").Fill.ForeColor.RGB = RGB(255, 192, 0)
.Shapes("Oval 98").Fill.ForeColor.RGB = RGB(255, 192, 0)
End With

如果形状是连续的,我们可以使用For i = 1 to 5 Step 1,但是在上述情况下,可以使用Select Case吗?如何简化代码?会不会像 Select Case 23, 39, 61, 72, 98?

您关于使用 Select 大小写的建议完全不正确。

根据@Raymond Wu 的建议,最好使用循环,但是,我会使用 for each 循环作为其更简单的语法。

Dim myNum as variant
For each myNum in Array(23, 39, 61, 72, 98)

    nGameSlide.Shapes("Oval " & CStr(myNum)).Fill.ForeColor.RGB = RGB(255, 192, 0)

Next

更好的方法是将 for each 循环封装在一个子循环中,并传入数字以用作参数。

Public Sub PaintSlides(byref ipArray as variant)

    Dim myNum as variant
    For each myNum in ipArray

        nGameSlide.Shapes("Oval " & CStr(myNum)).Fill.ForeColor.RGB = RGB(255, 192, 0)

    Next

end sub

您可以使用Select Case

For Each Shape in Shapes
Select Case Shape.Name
    Case "Oval 23", "Oval 39", "Oval 61", "Oval 72", "Oval 98"
        'Do something
    Case Else
        'Do nothing
End Select
Next Shape

使用此方法有一些优点,即您可以轻松地添加或更改特定 shape 的过程。

需要注意的是它会遍历所有 Shapes,因此如果幻灯片中的形状超过 5 个,可能会比使用 @Raymond 建议的 array() 方法慢一点。