提供された回答が私を完全に満足させないため、ここで私は自分の評価した助けを借りています。私はteylynの答えからいくつかのニュアンスを見逃している可能性があります。それが妥当であれば喜んで編集します。
アプリケーションレベルで変更イベントを処理する方法はないようです。
したがって、すべての変更はシートレベルで処理する必要があります。
これは(あなたが新しいシートを追加するたびに、それをコピーして貼り付けることを忘れないでください)コピーすることによって行われ、ワークブックのEVERYシートオブジェクト内のコードのこのビットを貼り付けることができます。
Private Sub worksheet_change(ByVal Target As Range)
Me.Calculate
End Sub
しかし、のために私たちがしなければならない面倒なコピーペーストは、各シートオブジェクトに戻ることなく簡単にこの機能をオフにしたい場合があります。
また、1枚のシートに大量の変更(マクロ、ドラッグ&ドロップ、ctrl + Hなど)をすると、地獄のループを避けることもできます。 A2で
- :はい/いいえ、当社の新機能
- はA4で有効/無効にする:最新のリフレッシュ
の時間、我々は3つの値を設定WS_refreshと呼ばれる新しいシートを追加します。これを行うに
A6で
- :リフレッシュできるようにする分間隔、秒で(私はこれを1に設定した)
我々は時間に短時間でいくつかのセルの値を変更したときに今、自動リフレッシュが最初に動作します変更、前回の回避まるで地獄のループ。あなたは危険な設定A6は0
に住みたい場合、これは、すべてのシートオブジェクトにコピー&ペーストする必要があるものです:
Private Sub worksheet_change(ByVal Target As Range)
auto_refresh = ThisWorkbook.Worksheets("WS_refresh").Range("A2")
If auto_refresh = "Yes" Then
last_refresh = ThisWorkbook.Worksheets("WS_refresh").Range("A4")
refresh_interval_sec = ThisWorkbook.Worksheets("WS_refresh").Range("A6")
refresh_interval_tv = TimeValue("0:00:" & refresh_interval_sec)
If Application.Calculation = xlCalculationManual And Now() > last_refresh + refresh_interval_tv Then
ThisWorkbook.Worksheets("WS_refresh").Range("A4") = Now()
Me.Calculate
End If
End If
End Sub
あなたはずっと、より多くの情報を提供しない限り、私たちは推測することができます! (自動リンク、UDF、シートまたは変更のイベント、データ/シート/公式の量、名前付き範囲内のリンクの壊れたリンクなど)影響が及ぶ要素は多すぎます。したがって、可能なすべての要因で質問を更新しない限り、私たちができることはありません。しかし、あなたが考えられるすべての影響要因で質問を更新している場合は、それらをチェックしてエラーを見つける可能性も非常に高いです。 – Ralph
@Ralph多分私は十分に明確ではなかった、私は私の質問を編集しました。私はファイルの遅さに取り組んでいますが、ここでは問題ではありません。素早い修正は、この自動リフレッシュを設定することですが、シートレベルでのみ、私がここで求めているのです。 –
Excelが更新され、セルが変更されるたびにすべてを計算するようにするには、 'Application.Calculation = xlCalculationAutomatic'を設定するだけです。これはメニューに入るのと同じです:' Formulaulas' - > 'Calculation Options' - →「自動」。とにかく、それはとにかくExcelシートのデフォルトです。あるいは、 'Worksheet_Change'イベントを利用して、そのサブ' ActiveSheet.Calculate'に1行だけをドロップすることもできます。 – Ralph