VBA程序停止刷新工作表

时间:2018-01-09 17:16:32

标签: excel vba excel-vba updates

我在VBA上创建自己的Conway's Game of Life,其中当前状态显示在工作表上。 因为我不熟练,实现可能效率不高(我使用2个布尔矩阵来模拟当前状态和下一个状态)。 为了在每一步显示结果,我sub display()取了matrix_current并将每个单元格用黑色或白色着色。为了使整个过程更顺畅,我已经包裹了Application.ScreenUpdating = FalseApplication.ScreenUpdating = True。短篇小说,看起来像是:

Private Sub display()
Application.ScreenUpdating = False
For i = 0 To sizeGrid
    For j = 0 To sizeGrid
        If matrix_curr(i, j) Then
            Cells(i + xmin, j + ymin).Interior.ColorIndex = 1
        Else
            Cells(i + xmin, j + ymin).Interior.ColorIndex = 2
        End If
    Next
Next
Application.ScreenUpdating = True
End Sub

在每个Call display()之前,我调用方法Sleep()让我们有时间观察每一步。

所以,这是我的问题: 工作表上的显示通常在经过多个步骤后停止。但是,程序仍在运行,最后显示最后一个状态。基本上,我可以监控开头,然后在显示的最后一步之前没有任何变化。 一切都好像工作表突然停止刷新一样。

你有任何想法来解决这个问题。

我事先感谢你的帮助(希望我能让自己理解  尽管我的英语很差)

1 个答案:

答案 0 :(得分:2)

  

我的问题是,经过多个步骤后,屏幕上不再发生任何事情(就好像它已冻结一样)。

那是因为Excel基本上没有气息 - 它基本上无法跟上所有ScreenUpdating切换。

当您将Application.ScreenUpdating切换回一次时,Excel会通过重新绘制来自行回应。

当您运行繁忙的循环时,它优先执行VBA代码并且Excel用户界面会:

(not responding)

这很正常:需要处理很多事情,所以要处理它们 - 更新用户界面,提升工作表事件,响应用户操作,计算单元格,所有这些事情"删除优先级",直到VBA代码完成。

重新尝试切换DoEvents后立即尝试添加Application.ScreenUpdating指令;这明确告诉Excel"好吧,继续,处理你已经得到的任何其他东西,然后在你准备好时回到这里"。我热烈建议您关闭Application.EnableEvents并将Application.Calculation设置为xlCalculationManual,直到代码完全执行。