我有一个sub,它以调用另一个sub(编辑工作簿的单元格)开始,然后关闭屏幕更新和警报。问题是,即使编辑工作簿的第一个子站点位于第二个子站点之前,该单元格也不会更新。
当我关闭第二个子时,单元格会更新。如何更新单元格,然后关闭屏幕更新?
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
启动时,屏幕更新已经为真;评论setupApp
sub out 有帮助,因为它显然比编辑单元格更早执行。
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
答案 0 :(得分:2)
我真的不明白为什么这不起作用。 但您可以尝试使用If语句调用SetupApp。为此,你必须将editSub改为函数,最后只返回一个真值。像这样:
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
第二个解决方案
您可以尝试使用DoEvents
强制事件来更新屏幕。
像这样:
Call editSub
DoEvents
Call setupApp
或者您在单元格中写入后立即放置DoEvents。
如果这不起作用,您可以尝试等待方法:
Application.Wait "00:00:01"
第一个解决方案
你是否试图在执行Sub?之前打开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