直到Onkey {RIGHT}

基本上我想循环下面的行动,直到我按{DOWN} ,但私人小组似乎不是100%的权利,所以代码只是永远循环。

 Public pressdown As Boolean Sub DemoOnKey() Application.OnKey "{RIGHT}", "moveright" Application.OnKey "{LEFT}", "moveleft" Application.OnKey "{DOWN}", "movedown" Application.OnKey "{UP}", "moveup" End Sub Sub moveright() Do Until pressdown Selection.Copy Destination:=Selection.Offset(0, 1) Selection.Offset(0, 1).Select Selection.Offset(0, -1).ClearContents DoEvents Loop If pressdown = True Then Call movedown 'Calls similar macro to moveright, but to movedown, hehe End If End Sub Private Sub Form_KeyPress(Key As Integer) Const down = "{DOWN}" If Application.OnKey = down Then pressdown = True End Sub 

你不能在任何地方有Form_KeyPress(Key As Integer) 。 这是一个事件处理程序,必须以用户的forms。 如果它在那里,你会得到一个编译时错误,因为你不能这样做, If Application.OnKey = down ,无论如何。 你越来越远离它,因为这个子从不input,因此永远不会被编译。

说了这么多,你的做法是错误的。
有一个循环移动蛇在设定的方向,并有四个关键处理程序,改变这个设置的方向。

另外请注意,直接循环不是一个好方法,因为它会导致Excel按键处理中出现问题。 我build议你使用OnTime作为主循环:

 private move_where as string Sub DemoOnKey() Application.OnKey "{RIGHT}", "moveright" Application.OnKey "{LEFT}", "moveleft" Application.OnKey "{DOWN}", "movedown" Application.OnKey "{UP}", "moveup" End Sub private Sub moveright() move_where = "right" end sub private Sub moveleft() move_where = "left" end sub private Sub movedown() move_where = "down" end sub private Sub moveup() move_where = "up" end sub Sub move() select case move_where case "right" ' Move right here case "left" ' Move left here case "down" ' Move down here case "up" ' Move up here end select Application.OnTime DateAdd("s", 1, Now), "move" End Sub