首页 > 解决方案 > 循环遍历数组以更改播放器 PowerPoint VBA

问题描述

我正在尝试创建一个宏,以便在我在 PowerPoint 上制作的游戏中的三个玩家之间循环。但是,当我运行代码时,它会更改一次并卡住。它不会循环遍历数组。在代码中,我计划更改包含玩家姓名的形状的颜色,并在其他玩家的框上显示透明的灰色按钮,以便他们无法调整自己的分数。这是我的代码。提前致谢。

Sub SwitchPlayers()
   Dim oSl As Slide
   Dim RGB As String
   Dim i As Long
   Dim myTurn() As Integer
   ReDim myTurn(2)  '0, 1, 2... 3 compartments

      Set oSl = ActivePresentation.Slides(5)
    
    
    
      For i = 0 To 2
      myTurn(i) = i + 1
    
    
      If myTurn(i) = 0 Then
          oSl.Shapes("T1NB").Fill.ForeColor.RGB = vbYellow
          oSl.Shapes.Range(Array("T2NB", "T3NB")).Fill.ForeColor.RGB = vbWhite
          oSl.Shapes.Range(Array("T2+1G", "T2-1G", "T3+1G", "T3-1G")).Visible = True
          oSl.Shapes.Range(Array("T1+1G", "T1-1G")).Visible = False
      ElseIf myTurn(i) = 1 Then
          oSl.Shapes("T2NB").Fill.ForeColor.RGB = vbYellow
          oSl.Shapes.Range(Array("T1NB", "T3NB")).Fill.ForeColor.RGB = vbWhite
          oSl.Shapes.Range(Array("T1+1G", "T1-1G", "T3+1G", "T3-1G")).Visible = True
          oSl.Shapes.Range(Array("T2+1G", "T2-1G")).Visible = False
      ElseIf myTurn(i) = 2 Then
          oSl.Shapes("T3NB").Fill.ForeColor.RGB = vbYellow
          oSl.Shapes.Range(Array("T1NB", "T2NB")).Fill.ForeColor.RGB = vbWhite
          oSl.Shapes.Range(Array("T1+1G", "T1-1G", "T2+1G", "T2-1G")).Visible = True
          oSl.Shapes.Range(Array("T3+1G", "T3-1G")).Visible = False
      End If
        
      Next i
        
 End Sub

标签: arraysvbapowerpoint

解决方案


再次感谢@SteveRindsberg。我想通了,并将 Select Case 添加到我的工具箱中。这是我想出的代码。效果很好。

Sub SwitchPlayers2()

Dim oSl As Slide
Dim RGB As String

    Set oSl = ActivePresentation.Slides(5)

       Select Case iLastRan
          Case Is = 0
                oSl.Shapes("T1NB").Fill.ForeColor.RGB = vbYellow
                oSl.Shapes.Range(Array("T2NB", "T3NB")).Fill.ForeColor.RGB = vbWhite
                oSl.Shapes.Range(Array("T2+1G", "T2-1G", "T3+1G", "T3-1G")).Visible = True
                oSl.Shapes.Range(Array("T1+1G", "T1-1G")).Visible = False
                iLastRan = iLastRan + 1
            Case Is = 1
                oSl.Shapes("T2NB").Fill.ForeColor.RGB = vbYellow
                oSl.Shapes.Range(Array("T1NB", "T3NB")).Fill.ForeColor.RGB = vbWhite
                oSl.Shapes.Range(Array("T1+1G", "T1-1G", "T3+1G", "T3-1G")).Visible = True
                oSl.Shapes.Range(Array("T2+1G", "T2-1G")).Visible = False
                iLastRan = iLastRan + 1
            Case Is = 2
                 oSl.Shapes("T3NB").Fill.ForeColor.RGB = vbYellow
                 oSl.Shapes.Range(Array("T1NB", "T2NB")).Fill.ForeColor.RGB = vbWhite
                 oSl.Shapes.Range(Array("T1+1G", "T1-1G", "T2+1G", "T2-1G")).Visible = True
                 oSl.Shapes.Range(Array("T3+1G", "T3-1G")).Visible = False
                 iLastRan = iLastRan + 1
                     If iLastRan > 2 Then
                         iLastRan = 0
                     End If
        End Select

    End Sub    

推荐阅读