|
本帖最后由 roych 于 2015-6-26 11:14 编辑
Access在计算方面并不如Excel,复杂的统计不该由Access完成,而是在Excel里完成之后再把数据导入到Access里。不过,有些版友希望Access可以完成Excel的一些工作,这样就可以一劳永逸了。
我一直觉得应该软件之间尽可能交互使用,扬长避短才能优化工作效率。正如男人是泥做的,女人是水做的,世界才更加精彩。而一旦女子偶尔强势一下无可厚非,但如果永远都一片阳刚,那她也不再是水做的了,应该是水泥做的吧。
言归正传,以下是对成绩高低进行排名的一段代码(附件里有注释):
- Private Sub 排名_Click()
- Dim exl As Excel.Application
- Dim wb As Excel.Workbook
- Dim ws As Excel.Worksheet
- Dim rst As New ADODB.Recordset
- rst.Open "select * from 成绩表", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
- Set exl = CreateObject("Excel.Application")
- exl.Workbooks.Add
- Set wb = exl.ActiveWorkbook
- With wb
- Set ws = exl.Worksheets(1)
- ws.Activate
- With ws
- .Range("A1").CopyFromRecordset rst
- rnk = exl.WorksheetFunction.Rank(Me.成绩, .Range("C:C"))
- End With
- wb.Close False, Me.Name
- End With
- MsgBox Me.姓名 & "的成绩排名为:第" & rnk & "名", vbInformation
- rst.Close
- End Sub
复制代码 这里的知识点有两三个:1、使用ADO打开数据集。2、导出数据集到工作表。3、调用Excel内置函数Rank。
此外,还有更简单的办法,不过测试时发现第二种方法运行要慢些:
- Private Sub 排名2_Click()
- Dim xcl As Object
- Dim rs As New ADODB.Recordset
- rs.Open "select * from 成绩表", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
- Set xcl = CreateObject("excel.sheet")
- Set xcl = xcl.Application.ActiveWorkbook.ActiveSheet
- With xcl
- .[a1].CopyFromRecordset rs
- .[k1].Formula = "=rank(" & Me.成绩 & ",C:C)"
- End With
- MsgBox Me.姓名 & "的成绩排名为:第" & xcl.[k1].Value & "名", vbInformation
- Set x = Nothing
- End Sub
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|