First, I'd recommend probing the code to see where your jumping out of the command. For example, debug.print "j<3"
inside your first if
command will tell you if that's where the code is exiting from. Put a different line in multiple spots and watch your immediate window to see what is being processed. You might want to print out your global variables as well to make sure they are what is intended.
Second, don't use end
as the goto point since end
is a keyword in VBA. I've changed it to endleft
If the speed is an issue then the following two points might help:
Third, since j
doesn't change inside the for loops, pull it outside. This is one less eval your doing inside every loop.
Fourth, put your other two if's together into one and use the logical AND
. Now your doing one less eval on every loop when the first condition is false.
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
Fifth, cool project. Will you share it when done?