设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 3346|回复: 10
打印 上一主题 下一主题

[模块/函数] “曲线救国”——再谈自定义函数

[复制链接]
跳转到指定楼层
1#
发表于 2011-3-5 23:55:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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库,就好比宋子文当年在美国军援,也要签些协议一样。

  1. Sub Power()
  2. Dim rst As New ADODB.Recordset
  3. Dim xcl As Object
  4. Set xcl = CreateObject("Excel.Application")
  5. rst.Open "select * from 主营收入", CurrentProject.Connection, 1, 3
  6. Do Until rst.EOF
  7. rst.Fields("主营收入3年复合增长09") = xcl.WorksheetFunction.Power(rst.Fields("主营收入09") / rst.Fields("主营收入06"), 1 / 3) - 1
  8. rst.MoveNext
  9. Loop
  10. rst.Close
  11. Set rst = Nothing
  12. Set xcl = Nothing
  13. End Sub
复制代码

       进入VBE界面后按F5直接运行就可以执行了。附件里是加了一个函数,直接调用过来的。当然,有兴趣的朋友,也可以把这个函数改编成带参数的Function。
       显然,这个自定义函数(准确点说,应该成为“过程”)比我们之前用的自定义表达式要复杂得多。不过,我为什么还要讲呢?主要在于想让大家知道,当Access函数不够用的时候,我们该如何去解决。
       而我的忠告是,除非记录条数超过Excel的范围(或Excel里运行较慢),否则还是在Excel里做好了再导入Access来更新数据会更好些。
游客,如果您要查看本帖隐藏内容请回复


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1经验 +8 收起 理由
5988143 + 8 精品文章

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2011-3-6 09:27:10 | 只看该作者
想不到roy除了ACCESS水平高外,文史知识也这么好,说理说得很明白,文风似毛泽东的文章风格,通俗易懂,与todaynew一样令人佩服,学习学习!
3#
发表于 2011-3-6 21:28:41 | 只看该作者
学习学习!
4#
发表于 2011-3-7 10:39:07 | 只看该作者
学习学习
5#
发表于 2011-3-8 13:46:09 | 只看该作者
文采不錯,思路亦不錯
6#
发表于 2011-6-20 18:00:35 | 只看该作者
thank you sharing it
7#
发表于 2011-6-23 16:07:30 | 只看该作者
谢谢分享,学习!

点击这里给我发消息

8#
发表于 2011-6-25 22:18:14 | 只看该作者
学习一下!谢谢!
9#
发表于 2011-11-24 12:19:28 | 只看该作者
看看
10#
发表于 2012-6-21 19:55:20 | 只看该作者
很不错,学习一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-14 18:08 , Processed in 0.101107 second(s), 36 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表