我正在尝试学习excel的一些vba编程,Long story short
我有一台使用allen bradley plc的机器,我在plc中创建了一个程序来记录每小时运行的统计数据,我已经设法将这些程序更新为实时更新,它每小时上传24小时。机器运行3班,早上6点到下午2点,下午2点到晚上10点,晚上10点到早上6点。在工厂,我们每天上午6点到早上6点上课。
我编写了以下代码,它复制plc中的值并将它们粘贴到匹配的日期,单元格“c10”包含= today()然后在工作表2上它将值粘贴到匹配日期下的日历中
这现在工作正常,但我想改变它,以便在每个日期下它包含早上6点到早上6点的价值,而不是24小时的价值。
我遇到的问题是单元格c10(今天的日期)将在上午12点之后更新,因此粘贴目标将会更改。
继承我的代码
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
希望有人可以提供帮助,而不是寻找完整的解决方案,只需在正确的方向上提供一些帮助
由于
答案 0 :(得分:0)
这是达到你想要的东西的两种方式:
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中获取机器的日期并从那里继续。