我有一个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 希望我解释得很好。
有人可以帮我解决这个问题吗?
答案 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 结束子