Excel vba:为什么不更新屏幕,在closures屏幕更新之前更新单元格

我有一个从调用另一个子(编辑工作簿的单元格)开始,然后closures屏幕更新和警报。 即使编辑工作簿的第一个子文件位于第二个子文件之前,单元格也不会更新。

当我closures第二个子,单元格更新。 如何更新单元格,然后closures屏幕更新?

Sub mainSub() Call editSub 'edit cell's value: ThisWorkbook...Cells(i, j).Value=... Call setupApp 'turns off scren updating, when uncommented prevents the previous sub from getting visible results ... End Sub Sub setupApp() Application.ScreenUpdating = False Application.DisplayAlerts = False End Sub 

编辑 :当mainSub开始时屏幕更新已经是true; 评论setupApp子出有帮助 ,因为它明显得到执行早于单元编辑为什么。

 Sub editSub() Dim resultArray() As String resultArray = getStateNames() 'just returns an array of Strings displayStateNameArray (resultArray) End Sub Sub displayStateNameArray(resultArray As Variant) ThisWorkbook.Worksheets("sheet 1").Range("C6:C97").Clear Dim k As Integer Dim i As Integer i = 1 For k = LBound(resultArray) To UBound(resultArray) ThisWorkbook.Worksheets("sheet 1").Cells(5 + i, 3).Value = resultArray(k) i = i + 1 Next End Sub 

我真的不明白为什么这不起作用。 但是,您可以尝试使用If语句来调用SetupApp。 为此,您必须将editSublocking到一个函数,最后返回一个真正的值。 像这样的东西:

 Sub mainSub() If editSub = True Then Call setupApp End Sub Sub setupApp() Application.ScreenUpdating = False Application.DisplayAlerts = False End Sub Function editSub() As Boolean 'Code stuff in her editSub = True End Function 

第二个scheme

您可以尝试使用DoEvents强制事件来更新屏幕。

喜欢这个:

 Call editSub DoEvents Call setupApp 

或者,在写入单元格之后立即放入DoEvents。


如果这不起作用,您可以尝试等待方法:

 Application.Wait "00:00:01" 


第一个scheme

你有没有尝试过在执行之前的ScreenUpdating子?

 Sub mainSub() Call setupApp(true) Call editSub 'edit cell's value: .Cells(i, j).Value=... Call setupApp (false)'turns off scren updating, when uncommented prevents the previous sub from getting visible results ... End Sub Sub setupApp(bol as Boolean) Application.ScreenUpdating = bol Application.DisplayAlerts = bol End Sub