【发布时间】: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