2011-08-16 60 views
2

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

我不能这样做:

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

因为当你将屏幕升级为true,它更新已经作出,因为你把它设置为false的所有更改。我如何更新一个单元格?

谢谢!

+2

那个房间里有什么?这是一个计算值吗?根据您的文档设置,您可以将计算状态设置为手动,然后计算出一个单元格。据我所知,尽管在同一张纸上存在其他更改时,您不能仅显示单个单元格更新。您可以生成用于显示的临时工作表,但如果您正在处理大量数据,这可能不是一个可行的选项。 – variant

回答

3

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

的“不跳周围所有的时间”部分使我不知道,如果你正在使用SelectActivate很多在你的代码。这些操作非常耗时,你应该能够在没有它们的情况下完成大部分任务。

明智地使用的Range和/或所讨论的WorksheetCells性能应该比Select和/或Activate任何组合快得多。如果你可以加快你的代码,那么你可能会离开ScreenUpdating,从而解决你原来的问题

+0

我不使用选择或激活非常多。但是,我会切换表单两次,这是我关闭屏幕更新的重要原因。但是,我不知道我是否可以删除它,并执行相同的操作,但保留在一张纸上。这可能会让我关闭屏幕更新。谢谢! –

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

是的,我看着状态栏和Msgbox的,我真的只想更新屏幕上的单元格。 –

1

将单元格绑定到文本框或其他控件,并让它显示你想要保持眼睛的值上。

0

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

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

?这可以造成很大的差异。

相关问题