首页 文章

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

提问于
浏览
3

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

我不能只做以下事情:

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

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

谢谢!

4 回答

  • 1

    当然,我已经关闭了屏幕更新,以便它运行得更快,并且不会一直跳转 .

    "doesn't jump around all the time"部分让我想知道你是否在代码中使用了 SelectActivate . 这些都是非常耗时的操作,你应该能够在没有它们的情况下实现大多数事情 .

    明智地使用 RangeRange 和/或 Cells 属性应该比 Select 和/或 Activate 的任何组合快得多 . 如果你可以加速你的代码,那么你可以离开 ScreenUpdating ,从而解决你的原始问题

  • 3

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

  • 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
    

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

  • 0

    如果速度是一个问题,你能做到:

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

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

相关问题