У меня возникли проблемы с поиском ответа на этот вопрос.
В Листе 1 у меня есть ряд ячеек («A4: Q4»), в которых все имеют определенные функции RTD, где они собирают данные о запасах в реальном времени из внешней программы. Эти ячейки обновляются каждые несколько секунд, в зависимости от изменений в родительской программе.
Я хочу сделать так, чтобы каждый раз, когда любое значение в этом диапазоне изменялось (т. Е. Каждый раз, когда обновлялись значения RTD), копировало значения этого диапазона и вставляло их в следующую доступную пустую строку в Sheet2. Это должно эффективно создать длинный список значений, но у меня возникла проблема с RTD. Мой текущий код будет делать то, что я хочу, но только если значения в диапазоне изменяются вручную, а НЕ когда обновляются значения RTD. Даже когда значения RTD обновляются / изменяются, новые значения не копируются в Sheet2, если это имеет смысл. Казалось бы, это как-то связано с макросом, который не понимает, что значения меняются автоматически. Когда я делаю свои собственные изменения в значениях в этом диапазоне, это работает, но это делает функции RTD в ячейках бесполезными.
Вот что у меня есть:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
' The variable KeyCells contains the cells that will
' cause an alert when they are changed.
Set KeyCells = Worksheets("Sheet1").Range("A4:Q4")
' Wait for change to happen...
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
' once change happens, copy the range (yes keep R4 value too)
ThisWorkbook.Worksheets("Sheet1").Range("A4:R4").Copy
' Paste it into the next empty row of Sheet2
With ThisWorkbook.Worksheets("Sheet2")
Dim NextRow As Range
Set NextRow = ThisWorkbook.Worksheets("Sheet2").Range("A" & .UsedRange.Rows.Count + 1)
NextRow.PasteSpecial Paste:=xlValues, Transpose:=False
Application.CutCopyMode = False
End With
End If
End Sub
Я думаю, что потенциальным решением было бы сделать цикл, в котором он будет хранить каждое значение в этом диапазоне, а затем каждые полсекунды или 1 секунду он будет сравнивать сохраненные значения с «текущими» значениями и видеть, есть какие-то изменения. Если есть, скопируйте значения этого диапазона в Sheet2. Но это кажется неуклюжим.
Есть идеи? Спасибо!