2011-08-16 108 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 

?這可以造成很大的差異。

相關問題