Excel VBA屏幕更新 – 只更新一个单元格
我有一个运行大约一分钟的macros,并加载/处理大量的数据。 当然,我已经closures了屏幕更新,使其运行速度更快,不会一直跳。 不过,我希望能够打开屏幕更新/强制更新一个单元格。
我不能只是这样做:
Application.ScreenUpdating = True <SET VALUE> Application.ScreenUpdating = False
因为当您将屏幕更新设置为true时,它会更新自设置为false以来所做的所有更改。 我如何更新一个单元?
谢谢!
当然,我已经closures了屏幕更新,使其运行速度更快,不会一直跳。
“不会一直跳”部分让我怀疑你是否使用Select
和Activate
你的代码很多。 这些操作非常耗时,如果没有这些操作,你应该能够完成大部分任务。
明智地使用相关Worksheet
的Range
和/或Cells
属性应该比Select
和/或Activate
任何组合快得多。 如果你可以加快你的代码,那么你可能会离开ScreenUpdating
,从而解决你原来的问题
将单元格绑定到文本框或其他控件,并让它显示您想要关注的值。
一种黑客,但你可以打印一个错误消息,当你想要通知特定的细胞更新或[对于更less的干扰]更新状态栏:
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub test_screen_updating() Range("A1:A10").ClearContents Application.ScreenUpdating = False For i = 1 To 10 Range("A" & i).Value = i If i = 2 Then ' MsgBox "A2 was updated: " + CStr(Range("A2").Value) Application.StatusBar = "A2 updated to: " + CStr([A2]) End If Sleep 500 Next i Application.StatusBar = False Application.ScreenUpdating = True End Sub
只要确保你重置状态栏,如果你更新它。
如果速度是一个问题,你可以这样做:
Application.Calculation = xlCalculationManual <process> Application.Calculation =xlCalculationAutomatic
? 这可以造成很大的不同。