2014年8月6日星期三

ACCESS使用VBA实现列值累加并取得累加阀值的记录

题目很拗口,主要是想要表达的东西比较曲折,还是以实例来说明比较直观,假设在Access中有以下的表table1。table1是一张成绩表,我想要的结果是:所有人的成绩按着总分(Score)从大到小排列,然后在排列好的表中从上到下累加English/Score列(第1行+第2行+……+第N行的值),当累加值>0.7时,取出第1行到第N行的记录。











































NameEnglishFrenceChineseScoreProportion

(English/Score)
Jasmine81401002200.37
Hill7080602100.33
Jay8020801800.44
Tom5050501500.33


VBA的代码思路是:先把Table1按总分(Score)从大到小排列取出来放在记录集中,然后通过循环累加Proportion的值,取出符合条件的行数,最后从记录集中取出所需的内容。

代码如下:

Sub LookupSum()
Dim rst As Recordset
Dim MARK As Double
Dim values AS Double '阀值
Dim num As Double    '行数
Dim qdf As QueryDef  '查询
Dim strSQL As String

MARK = 0
num= 0
values = 0.7
'从大到小排列取出来放在记录集中
Set rst = CurrentDb.OpenRecordset(" select * from table1 order by Score desc")
'循环累加Proportion的值
Do While Not rst.EOF
If MARK >= values Then Exit Do
MARK = MARK + rst! Proportion
num = num + 1
rst.MoveNext
Loop
'新建一个查询
strSQL = "select top " & num & " * from table1 order by Score desc"
Set qdf = CurrentDb.CreateQueryDef("查询累计比例大于70%的成绩", strSQL)
DoCmd.OpenQuery qdf.Name
End Sub

没有评论:

发表评论