VBA Скопировать значение данных в реальном времени в другую ячейку того же листа - PullRequest
3 голосов
/ 15 марта 2019

У меня есть формула в ячейке "D1" для получения RTD, которая работает и получает постоянно обновляемые данные. Теперь мне нужна копия этой ячейки (только VALUE) в другой ячейке «B2», того же листа. Когда я пытаюсь найти код, который я нашел, ячейка "B2" остается пустой. По причинам теста я скопировал другое значение ячейки (постоянное значение) в «B2», и это сработало. Поэтому я считаю, что существует проблема с копированием значений RTD.

Я начал с простого копирования значений:

Sheets("New sheet").Range("B2") = Sheets("New sheet").Range("D1").value

or:

Sheets("New sheet").Range("B2").value = Sheets("New sheet").Range("D1").value

Тогда я начал искать другие решения, такие как:

Sheets("New sheet").Range("D1").Select
enter code here`Selection.Copy
Sheets("New sheet").Range("B2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False

или

Sheets("New sheet").Range("B2").Copy Sheets("New sheet").Range("D1").value

Не удалось с этим.

Затем я поигрался с интервалом, когда данные в "D1" получены. Возможно, код копии борется со слишком частыми данными. Поэтому я изменил интервал дросселя на несколько чисел до 10.000, но это не изменило результат.

Application.RTD.ThrottleInterval=0

Дополнительная информация: Я ввожу формулу для получения данных RTD в «D1» непосредственно перед тем, как копировать значение в «B2». Также попытался использовать функцию application.Wait, чтобы дать время для обновления данных, но поскольку макрос замерзает в это время, он не изменился. Кроме того, имитировали задержку времени с циклом while между вводом RTD-формулы и копированием значений в другую ячейку.

Настройки безопасности макросов: включено доверие к VBA-projectObjectModul и все макросы активны.

У вас есть идеи, как это решить? Заранее спасибо!

UPDATE : Я решил это, поместив формулу RTD только в «D1» в текущем подпрограмме, и когда этот подпункт закончен, я вызываю другой подпрограмма, которая копирует значение из «D1» в «B2»>. Это работает. Это не сработало, вызвав другой сабвуфер в текущем сабвуфере, его нужно сначала закончить.

Спасибо всем за вклад, ценим! :)

1 Ответ

0 голосов
/ 15 марта 2019

@ Дин и @Damian Я попытался сначала поместить значение в переменную, а затем вставить переменную, и это не сработало.

Однако я поместил msgBox переменной между строками, чтобы проверитьзначение, которое оказалось равным нулю, а ячейка "D1" пуста, хотя команда RTD уже введена выше.После того, как я нажму «ОК» в окне msgBox, появится значение в «D1».Задержка цикла while после команды RTD тоже не помогает.

Есть идеи, почему такая задержка?

Sheets("New sheet").Range("D1").Formula = RTDParameters

Dim counter As Integer
While counter <= 5000      'Delay
    counter = counter + 1
Wend

Dim tempValue As Variant
tempVaue = Sheets("New sheet").Range("D1").value
MsgBox tempValue
Sheets("New sheet").Range("B2") = tempVaue
...