Excel VBA, который будет копировать данные в реальном времени из столбца в следующий столбец, с интервалами времени по всему листу - PullRequest
0 голосов
/ 02 ноября 2019

У меня проблемы с созданием VBA для проекта, который включает в себя интервалы в реальном времени. Лист, первоначально созданный и использованный для этого около 8 лет назад, исчез в обновлении Windows в прошлом году. По жизни я не могу воссоздать код после всего этого времени.

Я хочу, чтобы данные в столбце A переместились в следующий столбец через определенный интервал времени. Столбец A содержит данные в реальном времени, которые изменяются в миллисекундах, и я хочу записывать данные из этого столбца через заданный интервал времени, например, 1 минуту.

На следующей 1-минутной отметке новые данные в столбце A должны быть перемещены в столбец B, а предыдущие сохраненные данные в столбце B теперь вставлены в столбец C. На следующей 1-й минуте отметьте данные вСтолбец A переходит к B, B - к C, C - к D и т. Д.

В приложении приведен макет того, как он будет выглядеть на листе, с исходным потоком данных в столбце A и захваченными данными из канала. Каждую 1 минуту перемещения по листу - Макет данных

Я обнаружил фрагмент кода, с которого я начал, что может объяснить, чего я пытался достичь. Друг, который помог мне с этим в 2012 году, уже не жив, но начал с этого -

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Columns.Count <> 16 Then Exit Sub

    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual

    Range("b5:b30").Value = Range("b5:b30").Value
    Range("b5:b30").Value = Range("a5:a30").Value

Я пытался скопировать / вставить и изменить строки `Range 'на странице VBA для каждого столбца, но этоне работалЯ действительно надеюсь, что может быть более простой способ сделать это, чем писать строки диапазона для каждого столбца листа.

Любая помощь приветствуется

1 Ответ

0 голосов
/ 03 ноября 2019

Попробуйте это:

Dim i As Long

Sub test()
If i = 0 Then
    i = 1
Else
    i = i + 1
End If

Range("A5:A34").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("B3").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("B3").Value = "Minute " & i
Application.OnTime Now() + TimeValue("00:01:00"), "test"

End Sub

Sub Reset()
    i=0
End Sub

Первая строка должна объявить один счетчик, который будет работать каждый раз, когда вы используете код. Один вызов процедуры test, который сместит значения одного первого столбца во второй, а также введет заголовок. Через одну минуту он сместит 1-й и 2-й столбцы и так далее. Существует еще одна процедура сброса счетчика.

Чтобы вам было проще, просто создайте 2 кнопки в верхней части заголовка, такие как «Выполнить» и «Сброс», и оттуда вызовите этот макрос.

Если у вас есть какие-либо проблемы, просто дайте мне знать.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...