打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
话题

Access利用Eval函数,简单实现回调机制

作者:盗梦-Access中国


有时候,我们很多代码结构很类似,前后都一样,就中间不一样。
提取不了为一个公共函数直接调用,不得不写成很多重复代码
如果用回调方式就能轻松解决问题
但vb,vba中实现回调要通过一个API函数,十分不方便
最近研究发现,可以利用Eval函数的特性(可以执行文本表达的代码),简单实现回调机制

优点:容易理解和使用
缺点:窗体的函数调用不到
           没有返回值(可以通过公共临时变量得到返回值)
           传递参数不方便
           调用的函数或者过程必须是公共的

附上我研究的几个模型,包括有无参数和返回值

1、示例(无参数,无返回值)

  1. '说明:无参数传递,没返回值

  2. '参数:funcName,函数表达式(字符串)。要调用的函数名,函数名后一定要加括号

  3. '示例:funcEvalEasy('funcTestEasy()')


  4. Public Function funcEvalEasy(funcName As String)

  5.     '其他代码过程

  6.     '...

  7.     '回调函数部分

  8.     MsgBox '开始执行函数' & funcName

  9.     Eval funcName

  10. End Function


  11. Public Function funcTestEasy()

  12.     MsgBox '我是测试函数,用于测试回调'

  13. End Function



2、示例(有参数,无返回值)

  1. '说明:有参数传递,没返回值

  2. '参数:funcName,函数表达式(字符串)。要调用的函数名,函数名后一定要加括号


  3. '方法1:在funcName,函数表达式中就写好参数

  4. '示例:funcEvalPara1('funcTestPara(1)')

  5. '特点:较为灵活

  6. Public Function funcEvalPara1(funcName As String)

  7.     '其他代码过程

  8.     '...

  9.     '回调函数部分

  10.     MsgBox '开始执行函数' & funcName

  11.     Eval funcName

  12. End Function


  13. '方法2:在执行回调的函数里面合并一个函数表达式

  14. '示例:funcEvalPara2(1,'funcTestPara')   '为了方便合成函数表达式,就不加括号

  15. '特点:有什么参数,一目了然,就是不灵活

  16. Public Function funcEvalPara2(i As Integer, funcName As String)

  17.     '其他代码过程

  18.     '...

  19.     '回调函数部分

  20.     MsgBox '开始执行函数' & funcName

  21.     Eval funcName & '(' & i & ')'

  22. End Function


  23. Public Function funcTestPara(i As Integer)

  24.     MsgBox '我是测试函数,用于测试回调' & vbCrLf & '你传进来的数字是' & i

  25. End Function


  26. '方法3:利用公共变量传递参数(这个可以参考下面的示例,一样道理,这里就不赘述)

 


3、示例(有返回值)

  1. Public intEvalReturn As Integer '临时变量,用于保存返回值


  2. '说明:有返回值

  3. '参数:funcName,函数表达式(字符串)。要调用的函数名,函数名后一定要加括号

  4. '示例:funcEvalReturn('funcTestReturn(1)')


  5. Public Function funcEvalReturn(funcName As String) As Integer

  6.     '其他代码过程

  7.     '...

  8.     '回调函数部分

  9.     MsgBox '开始执行函数' & funcName

  10.     Eval funcName


  11.     '获取返回值

  12.     MsgBox '返回结果' & intEvalReturn  '弹窗显示

  13.     funcEvalReturn = intEvalReturn    '返回结果

  14. End Function


  15. Public Function funcTestReturn(i As Integer)

  16.     MsgBox '我是测试函数,用于测试回调' & vbCrLf & '你传进来的数字是' & i & vbCrLf & '将执行计算返回一个值'

  17.     '计算

  18.     i = i + 1

  19.     '返回

  20.     intEvalReturn = i

  21. End Function

 

 


追加更新:
2015-01-21: 多谢todaynew版主告知,Eval本身可以返回值。例如Eval('1+1'),返回2。
                     那就不用像上面那么麻烦。详请见6楼


todaynew版主补充

其实不必设公共变量,Eval是可以返回值的。
Public Function getDate(ByVal y As Integer, ByVal m As Integer, ByVal d As Integer) As Date
    getDate = DateSerial(y, m, d)
End Function


Private Sub 确定_Click()
    Me.日期.Value = Eval('getDate(' & Me.年.Value & ',' & Me.月.Value & ',' & Me.日.Value & ')')
End Sub

 


 



如想更快的系统地学习Access数据库,请点右上角 关注 部落

点击加入群:access学习群  与更多Access大牛交流

如果您觉得这篇技巧真的有用,请关注我们。更重要手机转发分享一下!

如喜欢此技巧,手机右上角点开,分享到QQ空间,方便自己以后看

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
VBA数组参数的传递和返回
Excel中VBA编程学习笔记(三)
VBA 编程基础
学习笔记---JScript 函数
浅谈javascript函数劫持(转)
浅谈Javascript函数劫持
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服