题
Sub left()
Dim m As Integer
Dim n As Integer
For m = 0 To 3
For n = 0 To 3
If j < 3 Then
GoTo end
End If
If board(m + i - 1, n + j) = 1 Then
If board(i + m - 1, j + n - 1) = 2 Then
GoTo end
End If
End If
Next n
Next m
j = j - 1
end:
End Sub
所以我试图在Excel上制作俄罗斯方块游戏,但我的“moveleft”功能无法正常工作,当我快速按向左键2或3次时,它会跳过检查是否存在值为2(完整单元格)的单元格并执行完整操作细胞。有什么建议么?
解决方案
首先,我建议探测代码以查看在哪里跳出命令。例如, debug.print "j<3"
在你的第一个里面 if
命令会告诉您代码是否从那里退出。在多个位置放置不同的线路,然后观察您的直接窗口以查看正在处理的内容。您可能还想打印出全局变量以确保它们符合预期。
二、不要使用 end
作为转到点 end
是VBA中的关键字。我已将其更改为 endleft
如果速度是一个问题,那么以下两点可能会有所帮助:
第三,自从 j
for 循环内部不改变,将其拉到外部。这减少了您在每个循环中所做的评估。
第四,将另外两个 if 合而为一,并使用逻辑 AND
. 。现在,当第一个条件为 false 时,您在每个循环上都会少执行一次 eval 操作。
Sub left()
Dim m As Integer
Dim n As Integer
If Not (j < 3) Then
For m = 0 To 3
For n = 0 To 3
If ((board(m + i - 1, n + j) = 1) And (board(i + m - 1, j + n - 1) = 2)) Then
GoTo endleft
End If
Next n
Next m
j = j - 1
End If
endleft:
End Sub
第五,酷项目。完成后会分享吗?
不隶属于 StackOverflow