Office中国论坛/Access中国论坛
标题:
“曲线救国”——再谈自定义函数
[打印本页]
作者:
roych
时间:
2011-3-5 23:55
标题:
“曲线救国”——再谈自定义函数
本帖最后由 roych 于 2011-3-5 23:57 编辑
尽管不多,Access里的函数还是够用的。如,Dlookup相当于Vlookup。但如果复杂些该怎么办?版友
leejiner
就提出来,如何在Access里开N次方?
Access里顶多只有一个开平方的。开任意次方怎么办呢?拿民国时期的话来说,拿就只能“曲线救国”了。
X开N次方,可以视为X的1/N次指数。Access里正好有个Exp内置函数。但是,请不要高兴得太早了。这可不是任意数,而是以自然对数为底的指数函数。
看到这里,是不是有些灰心了?别担心,我们还有Log函数,这个正是以e为底的对数函数。接下来,就是考验你高中数学有没有学好的时候了。答案是:表达式1:Exp(Log(X)/N)),这也是雷锋日里我做的第一件好事。O(∩_∩)O~推导过程以下链接:
http://www.office-cn.net/forum.php?mod=viewthread&tid=96327&page=1#pid585867
这是“曲线救国”的方针之一,这个是从编程思想的层面上来“曲线救国”,有些鲁迅先生弃医从文,用方块字来抗日救国的味道。那么还有没有第二种方法?答案是:有。例如,军援募捐,就是一种更为直接些(当然没有前线抗战那么直接)的“曲线救国”。
同样地,对于这个问题,我们也可以借助Excel强大的“军援”来武装我们的前线去“救国抗亡”。在Excel里,Power是一个开N次方的函数,我们可以在Access里使用这个函数,当然,前提是必须引用Excel库,就好比宋子文当年在美国军援,也要签些协议一样。
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
rst.MoveNext
Loop
rst.Close
Set rst = Nothing
Set xcl = Nothing
End Sub
复制代码
进入VBE界面后按F5直接运行就可以执行了。附件里是加了一个函数,直接调用过来的。当然,有兴趣的朋友,也可以把这个函数改编成带参数的Function。
显然,这个自定义函数(准确点说,应该成为“过程”)比我们之前用的自定义表达式要复杂得多。不过,我为什么还要讲呢?主要在于想让大家知道,当Access函数不够用的时候,我们该如何去解决。
而我的忠告是,除非记录条数超过Excel的范围(或Excel里运行较慢),否则还是在Excel里做好了再导入Access来更新数据会更好些。
作者:
ycxchen
时间:
2011-3-6 09:27
想不到roy除了ACCESS水平高外,文史知识也这么好,说理说得很明白,文风似毛泽东的文章风格,通俗易懂,与todaynew一样令人佩服,学习学习!
作者:
坡芽歌书
时间:
2011-3-6 21:28
学习学习!
作者:
xuwenning
时间:
2011-3-7 10:39
学习学习
作者:
5988143
时间:
2011-3-8 13:46
文采不錯,思路亦不錯
作者:
yanwei82123300
时间:
2011-6-20 18:00
thank you sharing it
作者:
goto2008
时间:
2011-6-23 16:07
谢谢分享,学习!
作者:
wang1950317
时间:
2011-6-25 22:18
学习一下!谢谢!
作者:
efcndi
时间:
2011-11-24 12:19
看看
作者:
faith200703
时间:
2012-6-21 19:55
很不错,学习一下
作者:
accesswj
时间:
2012-6-21 20:48
okokokokokok
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/)
Powered by Discuz! X3.3