Excel VBA屏幕更新 - 仅更新一个单元格

时间:2011-08-16 20:14:59

标签: excel vba

我有一个运行大约一分钟的宏并加载/处理大量数据。当然,我已关闭屏幕更新,以便它运行得更快,并且不会一直跳转。但是,我希望能够打开屏幕更新/强制更新一个单元格。

我不能只做以下事情:

Application.ScreenUpdating = True
<SET VALUE>
Application.ScreenUpdating = False

因为当您将屏幕更新设置为true时,它会更新自您将屏幕更新设置为false以来所做的所有更改。如何只更新那个单元格?

谢谢!

4 个答案:

答案 0 :(得分:3)

  

当然,我已经关闭了屏幕更新,以便更快地运行   不会一直跳来跳去。

“不会一直跳转”部分让我想知道您是否在代码中使用了SelectActivate。这些都是非常耗时的操作,你应该能够在没有它们的情况下完成大部分工作。

明智地使用相关Range的{​​{1}}和/或Cells属性应该比Worksheet和/或{{1}的任何组合快得多}}。如果您可以充分加快代码速度,那么您可以离开Select,从而解决原始问题

答案 1 :(得分:1)

将单元格绑定到文本框或其他控件,并让它显示您想要关注的值。

答案 2 :(得分:0)

有点黑客攻击,但是当你想要通知的特定单元格被更新时,你可以打印一条错误消息,或者[更少侵入的东西]只需更新状态栏:

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

如果您更新状态栏,请确保重置状态栏。

答案 3 :(得分:0)

如果速度是个问题,你可以这样做:

Application.Calculation = xlCalculationManual
<process>
Application.Calculation =xlCalculationAutomatic

?这可以产生很大的不同。