问题描述
我添加了 VBA 代码(如下)来循环访问 Access 查询的结果。此代码的目的是计算 500 在特定列中出现的次数。一旦达到 500,它就会抓住时间并增加 30 分钟。客户不希望在 30 分钟的窗口中再次计算 500。
这一直有效,直到最后一次是晚上 11:30 之后。晚上 11:30 之后,“MyEnd”变量设置为第二天的上午时间。它退出循环,然后计算下一个 500;这使我的实际数从我的 1 中消失了。
我可以从计数中减去 1,但我不知道这是否总是正确的。它们可能是多个 500,并且计数也会关闭。
我试图确定如何处理代码在晚上 11:30 之后找到 500 的最后 2 次。
任何建议将不胜感激。感谢您的帮助.....
Dim strsql As String
Dim rs As DAO.Recordset
Dim MyStart As Date
Dim MyEnd As Date
Dim CntA As Integer
CntA = 0
MyStart = 0
strsql = "SELECT * FROM FurDet ORDER BY FurDet.Time"
Set rs = CurrentDb.OpenRecordset(strsql)
If Not rs.BOF And Not rs.EOF Then
rs.MoveFirst
While (Not rs.EOF)
DoEvents
If rs.Fields("503D") = 500 Then
MyStart = TimeValue(rs.Fields("Time"))
MyEnd = TimeValue(MyStart + "0:30")
CntA = CntA + 1
Do Until TimeValue(rs.Fields("Time")) > TimeValue(MyEnd) Or rs.EOF = True
DoEvents
rs.MoveNext
If rs.EOF = True Then Exit Do
Loop
End If
If rs.EOF = True Then
' do nothing
Else
rs.MoveNext
End If
Wend
End If
Debug.Print CntA
解决方法
您应该将时间存储为日期,而不是文本。无论如何,试试这个,包括日期:
Dim StartDate As Date
Dim MyTime As Date
' <snip>
StartDate = Date
rs.MoveFirst
While Not rs.EOF
If rs.Fields("503D").Value = 500 Then
MyStart = StartDate + TimeValue(rs.Fields("Time"))
MyEnd = DateAdd("n",30,MyStart)
CntA = CntA + 1
Do
MyTime = TimeValue(rs.Fields("Time").Value)
rs.MoveNext
Loop Until DateDiff("n",MyStart + MyTime,MyEnd) > 0 Or rs.EOF
End If
rs.MoveNext
Wend
rs.Close