2011-08-16 18 views
2

私は約1分間実行され、多くのデータをロード/処理するマクロを持っています。当然のことながら、私は画面の更新をオフにして、より速く実行し、常に飛び回らないようにしました。しかし、私は1つのセルを更新/強制的に画面更新を有効にしたいと思います。Excel VBA画面更新 - 1つのセルのみを更新する

私はちょうどような何かを行うことはできません。

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

あなたがtrueに画面の更新を設定すると、それはあなたがfalseに設定以降に行われたすべての変更を更新しますので

。その1つのセルだけを更新するにはどうすればよいですか?

ありがとうございます!

+2

そのセルには何がありますか?それは計算された価値ですか?ドキュメントの設定に応じて、計算状態を手動に設定し、その1つのセルを計算することができます。私が知る限り、同じシート上に他の変更があった場合でも、単一のセルを更新するだけでは表示できません。表示用に一時的なワークシートを生成することもできますが、多くのデータを扱う場合は、おそらく実行可能なオプションではありません。 – variant

答えて

3

自然に私はスクリーン更新をオフにして、より速く実行し、 は常に飛びません。

の部分はあなたがSelectActivateあなたのコード内で大量に使用している場合、私は思ってしまう「の周りのすべての時間をジャンプしません」。これらは非常に時間のかかる操作であり、ユーザーがなければほとんどの作業を達成できるはずです。 Rangeおよび/または問題のWorksheetCells性質の

賢明な使用はSelectおよび/またはActivateの任意の組み合わせよりもはるかに高速でなければなりません。あなたのコードを十分にスピードアップできる場合は、ScreenUpdatingをオンにして元の問題を解決できる可能性があります。

+0

私は選択を使用していないか、非常に活性化しています。しかし、私は2回シートを切り替えるので、画面の更新をオフにする大きな理由です。しかし、私はそれを取り除くことができ、同じ操作を行うことができますが、1つのシートに留まるのだろうかと思います。それはおそらく私が画面の更新をオフにすることができます。ありがとう! –

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 

?それは大きな違いを生み出すことができます。

関連する問題