VBA Копирование столбцов на соответствующую дату в Excel Calender

Я пытаюсь научиться программировать на VBA для Excel, Короче говоря

У меня есть машина, использующая Allen Bradley PLC, я создал программу в PLC для записи статистики почасового запуска, мне удалось получить их для обновления в реальном времени в таблицу Excel, она загружается каждый час в течение 24 часов. Машина работает в три смены с 6:00 до 14:00, с 14:00 до 22:00, с 22:00 до 6:00. На фабрике мы проводим занятия каждый день с 6 до 6 утра.

Я написал следующий код, который копирует значения из plc и вставляет их в дату сопоставления, ячейка "c10" содержит =today(), а затем на листе 2 будет вставлять значения в календарь под датой сопоставления.

теперь это работает нормально, однако я хотел бы изменить его так, чтобы под каждой датой он содержал значения с 6 до 6 утра, а не 24 часа.

у меня проблема в том, что ячейка c10 (сегодняшняя дата) обновится после 12:00, и поэтому назначение вставки изменится.

вот мой код

Private Sub work_test()

 'set variables
    Dim Day As Date
    Dim rfound As Range
    Dim frow, fcol As Integer
    Dim sh1, sh2 As Worksheet

'set sheets
    Set sh1 = Sheets("sheet1")
    Set sh2 = Sheets("sheet2")

'sets day as current day, finds matching day in sheet2
     Day = sh1.Range("c10")
           Set rfound = sh2.Range("7:11").Find(Day, LookIn:=xlValues)

           If Not rfound Is Nothing Then

                frow = rfound.Row
                fcol = rfound.Column

                sh1.Range("c11:c34").Copy sh2.Cells(9, fcol)
            Else
                MsgBox "No match found"


           End If
'runs timer
     Call timer

End Sub

Sub timer()
'repeats cell update timer
Application.OnTime Now + TimeValue("00:01:00"), "work_test"
End Sub

Надеюсь, что кто-то может помочь, не ища полного решения, просто немного помощи в правильном направлении

Спасибо

1 ответ

Это два из многих способов достижения желаемого:

1.- Заменить формулу в C10 с этим:

   = TODAY() + IF( NOW() - TODAY() < TIME(6,0,0) , -1 , 0 )

Формула выше проверяет время, и оно меньше, чем 06:00:00, а затем оставьте один на дату. Таким образом, все, что находится между полуночью и 06 утра, будет считаться днем ​​ранее.

2.- В вашем коде замените эту строку:

   Day = sh1.Range("c10")

с этим:

   Day = Date + IIf(Time < TimeSerial(6, 0, 0), -1, 0)

Как и в пункте 1 выше, только в том случае, если вы используете VBA, нет необходимости указывать дату в виде формулы на рабочем листе, дату на машине можно получить непосредственно в VBA и продолжить с нее.

Другие вопросы по тегам