arrays - 循环遍历数组以更改播放器 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
解决方案
再次感谢@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
推荐阅读
- javascript - JS 运行时中的 Lua (Fengari):大整数的字符串表示有尾随“.0”
- reactjs - useEffect 总是设置我的 addEventListener
- css - Angular ngx-bootstrap - 如何制作一个大而宽的模态
- c++ - 我以前用过一种方法,现在同样的方法不起作用
- reverse-engineering - ghidra 充满了 thunk 功能
- kubernetes - 是否可以使用 kubernetes 在每个节点上运行相同的 app+db?
- wpf - WPF选项卡仅在第一个选项卡上保留上下文
- javascript - 减少和合并对象集合的最佳方法是什么
- sql - 我需要创建一个包含累积值的表
- python-3.x - 在 pytest 中,如何根据 bash shell 表达式设置环境变量?