N次迭代后屏幕未更新

时间:2015-08-31 21:25:39

标签: excel vba excel-vba while-loop crash

我在我的excel上运行一个非常简单的" Snake"类游戏,这意味着我需要在我的main-while循环中连续更新屏幕。 "蛇" (基本上是一个彩色单元格)在20x20表中随机移动。

它可以工作几秒钟,然而,某些点屏幕停止更新; ans excel停止响应,同时仍然运行代码。这会导致崩溃。

我使用For循环进行循环,这避免了崩溃,但仍然会停止更新,直到循环结束。当循环停止时,屏幕最后一次更新。 我还包括了#34;睡眠"但是,每个函数之后的语句都没有帮助。 这是主要代码:

    Sub main()
    Dim table(20, 20) As Integer
    Dim index_move As Integer
    'Position class contains only X and Y parameters
    Dim index_actual_head_pos As Position 
    Set index_actual_head_pos = New Position

    Dim i As Long
    index_actual_head_pos.x = 5
    index_actual_head_pos.y = 15
    Application.ScreenUpdating = True

    For i = 1 To 50 'this remplaces the initial while loop
    'next line generates a random movement, bounded by a 20x20 matrix
    index_move = generer_movement(index_actual_head_pos)
    'next line updates the "snake" position params
    Call update_position(index_actual_head_pos, index_move)
    'next line deletes previous snake and draws a new one
    Call draw(index_actual_head_pos)
    Sleep (200)
    Next i
    End Sub

请注意,问题实际上是屏幕更新。如前所述,我不知道如何强制excel连续更新屏幕

非常感谢,

丹尼斯

1 个答案:

答案 0 :(得分:1)

您应该放弃Sleep(200)并让Excel应用程序对象进行200毫秒的处理。

dim dTill as double   'should be at the top with the other var declarations

dtill = Timer + 0.200
do while timer < dTill and timer > 0.200: DoEvents: loop

timer > 0.200很重要,因为Timer会在午夜重置,如果你在¹/ 5秒内过夜,你不会希望它在24小时内停止运转。