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 и продолжить с нее.