|
这是我编写的两段代码。- Sub Power()
- Dim rst As New ADODB.Recordset
- Dim xcl As Object
- Set xcl = CreateObject("Excel.Application")
- rst.Open "select * from 主营收入", CurrentProject.Connection, 1, 3
- Do Until rst.EOF
- rst.Fields("主营收入3年复合增长09") = xcl.WorksheetFunction.Power(rst.Fields("主营收入09") / rst.Fields("主营收入06"), 1 / 3) - 1
- Debug.Print rst.Fields("主营收入3年复合增长09")
- rst.MoveNext
- Loop
- rst.Close
- Set rst = Nothing
- Set xcl = Nothing
- End Sub
复制代码- Function CallPower(Field1 As String, Field2 As String, year As Long) As Double
- Dim rst As New ADODB.Recordset
- Dim xcl As Object
- Set xcl = CreateObject("Excel.Application")
- rst.Open "select " & Field1 & "," & Field2 & " from 主营收入", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
- Do Until rst.EOF
- CallPower = xcl.WorksheetFunction.Power(rst.Fields(Field1) / rst.Fields(Field2), 1 / year) - 1
- Debug.Print CallPower
- rst.MoveNext
- Loop
- rst.Close
- Set rst = Nothing
- Set xcl = Nothing
- End Function
复制代码 Debug.Print调试的时候,结果是一样的。所以开始时是打算采用Function那段的,不过执行更新查询后 ,问题就来了:
在QBE界面调用Function来做更新查询时,结果是所有的记录都跟记录的最后一条记录一样。最后只好改写成Sub了。Sub当然没问题了,不足之处是只能在VBE界面下运行,而且灵活度较小。
关于函数和过程,比较透彻的解说,网上几乎没有,至少俺是“百度不得其解”,而这个特例,应该算是比较普遍的问题,至少可以让大家加深对函数和过程的理解;而对新手来说,也可以少走一些弯路。
尽管我知道是MoveNext的问题,但是,应该如何修改语句呢?欢迎大家一起研究。
|
|