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