VBA将列复制到excel日历中的匹配日期

时间:2015-12-12 18:42:22

标签: excel-vba plc vba excel

我正在尝试学习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

希望有人可以提供帮助,而不是寻找完整的解决方案,只需在正确的方向上提供一些帮助

由于

1 个答案:

答案 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中获取机器的日期并从那里继续。