ビデオの01:00に説明されているように、
コードは Sheet1 (またはサーバー データのキャプチャに使用するシート) に配置する必要があります。つまり、VBA の左上のプロジェクト エクスプローラー ペインでシートの名前をダブルクリックして、そのコード ウィンドウにアクセスする必要があります。
Sub() の名前は、Youtube に示されているとおりに正確に使用する必要があります ... Private Sub Worksheet_Change(ByVal Target As Range)
。コードを手で入力するか、コード ウィンドウの上の選択ボックスから [ワークシート] と [変更] を選択します。「ワークシート」を選択すると最終的に自動的に作成される「Sub Selection_Change」サブを削除します ( を含むEnd Sub
)。
特定のIf Not Intersect(...)
セルの変更のみが残りのコードによって処理されることを気にします
最初の行にブレークポイントを設定すると ( Private Sub ...
Debug/Toggle Breakpoint または {F9} を使用)、{F8} を使用してコードをステップ実行し、監視することができます。
編集:
いくつかのグーグルの後...=RTD()
変更マクロをトリガーしません(多くの人を失望させます)-そのため、さまざまな戦略が必要です。
=RTD()
時々データをフェッチし(時間間隔X)、現在の[A2]とは異なるセルCに入れます。すべての X/2 を実行し、C <> [A2] かどうかをチェックするコード ブロックを作成できます ... はいの場合は C を [A2] に移動し、古い値を下にコピーします。
例:
モジュール「TimerFunctions」を作成し、このコードを追加します
Public IsTimer As Boolean
Sub TimerSet(IntervalSec As Date, TimerProcName As String)
If IsTimer Then Application.OnTime Now() + IntervalSec, TimerProcName, , True
End Sub
Sub TimerAction()
' look for new value ... e.g. compare RTD cell [A1] with last stored value [A2]
If [A2] <> [A1] Then
' your original code - move whole stack one down
Range("A3:A31").Value = Range("A2:A30").Value
' copy new value on top of stack
[A2] = [A1]
End If
' do it again in 2 seconds
TimerSet TimeValue("00:00:02"), "TimerAction"
End Sub
シート1
Private Sub Worksheet_Activate()
IsTimer = True
TimerSet TimeValue("00:00:02"), "TimerAction"
End Sub
Private Sub Worksheet_Deactivate()
IsTimer = False
End Sub
2 秒ごとに RTD 関数で新しい値がチェックされ、見つかった場合はその値がスタックの一番上に保存され、残りの 30 は 1 プッシュ ダウンされます。これは、シートにいる限りすぐに機能します。Sheet2 に変更する (= Sheet1 を無効にする) と、Sheet1 に戻る (= シートを有効にする) まで、このメカニズムは停止します。
この時限処理が常に実行される必要がある場合は、アクティブなシートが別のシートであってもすべてが機能するように、セルのアドレス指定にもう少し力を入れる必要があります。