【问题标题】:Cycle Through Array to Change Players PowerPoint VBA循环遍历数组以更改播放器 PowerPoint VBA
【发布时间】:2021-12-12 09:43:08
【问题描述】:

我正在尝试创建一个宏,以便在我在 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

【问题讨论】:

  • 每次调用子程序时,都会在 myarray 中填充从 0 开始的相同数字,因此每次运行时都会产生相同的效果。作为起点,考虑将 Static lLastRun 声明为 Long 并将其用作案例选择器。将其设置为零开始,每次调用 sub 时将其递增,但如果它> 2,则再次将其设置为零。声明为静态的变量在子例程结束后保留​​其值。
  • 感谢您的回复史蒂夫林兹伯格。澄清一下,您说的是使用 Select Case 块而不是 If-ElseIf 块对吗?

标签: arrays vba powerpoint


【解决方案1】:

再次感谢@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    

【讨论】:

    猜你喜欢
    • 2022-01-22
    • 2015-11-22
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多