每小时24小时的工作时间

时间:2017-10-13 11:21:18

标签: vba

我有一个MS访问表(MasterLogs),结构为Date,UserName,Position,loginTime,logoutTime。(登录和注销字段类型是日期和时间) 我想将此表中的数据提取到列

的另一个表(PositionHrs)
Date
Username
Position
0000-0059
0100-0159
0200-0259 
...
until 2300-2359 (which are basically like time duration).

在Masterlogs表中,记录类似于01-Aug-17,用户名,位置,并且将有登录注销时间(例如:登录01-Aug-17 00:05和登出时间01-Aug-17 02: 45)

我正在寻找一个VBA代码,它可以读取masterlogs中的记录,并将持续时间分钟分配到positionHrs表中的相应列。 因此该表应该在0000-0059列中具有用户名的记录,值为00:54(在0000到0059时间期间为54分钟,在0100-0159列为01:00,在0200-0259列为剩余持续时间00:45 希望我解释得很好。

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

感谢您回复braX。以下代码在相应的小时内为每个人添加持续时间的记录。如果此人在接下来的几个小时内有连续的持续时间,则不会将这些持续时间添加到相应的小时列。

Sub HourlyDuration()

Dim rs1作为Recordset Dim rs2作为Recordset     设置rs1 = CurrentDb.OpenRecordset(“MasterLogs”)     设置rs2 = CurrentDb.OpenRecordset(“PositionHrs”)

Do While Not rs1.EOF

'用于在rs2中添加分钟![0000-0059]“hour1”

    If Format(rs1![On], "hh:nn") >= #12:00:00 AM# And Format(rs1![On], "hh:nn") <= #12:59:59 AM# Then

        Dim St As String

        St =  Format(TimeValue("01:00:00") - TimeValue(RoundTime(rs1!On, 60)), "hh:nn")

'roundtime是一个将时间缩短到下一分钟的函数(时间字段是dd-mmm-yy hh:nn:ss)

        rs2.AddNew
        rs2![Date] = rs1![Date]
        rs2![0000-0059] = St 
        rs2!Position = rs1!Position
       ' rs2!Staff = rs1!Staff
        rs2.Update
    End If
对于rs2来说是

![0100-0159]“hour2”

如果格式化(rs1![开],“hh:nn”)&gt; =#1:00:00 AM#和格式化(rs1![开],“hh:nn”)&lt; =#1:上午59:59#然后

        Dim st1 As String

        st1 = Format(TimeValue("02:00:00") - TimeValue(RoundTime(rs1!On, 60)), "hh:nn")

       rs2.AddNew
        rs2![Date] = rs1![Date]
        rs2![0100-0159] = st1 
        rs2!Position = rs1!Position
        'rs2!Staff = rs1!Staff
        rs2.Update
    End If

'所有小时都重复相同的条件,然后

rs1.MoveNext

Loop


MsgBox ("Finished")


rs1.Close
Set rs1 = Nothing

rs2.Close   设置rs2 = Nothing 结束子