注册 登录
Office中国论坛/Access中国论坛 返回首页

ganlinlao的个人空间 http://www.office-cn.net/?230471 [收藏] [复制] [分享] [RSS]

日志

VBA与函数重载

热度 2已有 2837 次阅读2014-6-20 11:37 |个人分类:vb入门| VBA与函数重载

VBA与函数重载

所谓函数重载是指同一个函数名可以对应着多个函数的实现。
例如,可以给函数名add()定义多个函数实现,该函数的功能是求和,即求两个操作数的和。
其中,一个函数实现是求两个int型数之和,另一个实现是求两个浮点型数之和,
再一个实现是求两个复数的和。每种实现对应着一个函数体,这些函数的名字相同,但是函数的参数的类型不同。这就是函数重载的概念。
函数重载在类和对象的应用尤其重要。
函数重载要求编译器能够唯一地确定调用一个函数时应执行哪个函数代码,即采用哪个函数实现。
确定函数实现时,要求从函数参数的个数和类型上来区分。
这就是说,进行函数重载时,要求同名函数在参数个数上不同,或者参数类型上不同。否则,将无法实现重载。

如果按这样的定义,VBA不支持函数重载!!因为vba没办法写同名函数。也没有构造函数。那vba能实现函数重载同样的功能吗?

嘿嘿……

情型1:简单的不同数据类型的重载功能
            function SubA(  varA as Variant)
           select case varType(varA)
           case VBString :
          ....
           case VBInteger,VBLong :
         ...
          end select
          End function

情型2:不确定性的参数
       function  funA(optional varA,optional varB,……)可选参数变量只能是variant
       if not isming(varA) then
            select case varType(varA)
        case vbString:
        ……
        case vbInteger,VBlong:
        ……
        end select
      else if not isming(varB) then
      ……
      end function
 
  情型3:
        function funA (paramarray())
    处理数组参数情形
        end function

  情型4:optional中使用数组    (高难度动作)
      vba参考写明optoional是无法使用数组作为可选参数的。
      只不过参考说明从来就是被人用来突破的。     
      Declare Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr" (Var() As Any) As Long
      dim b(5) as long '随便定义一个数组,二维的也行
      function FunA(optional  varA as long)
       varA=varPtr(b)
       如果varA=0是空数组,非0则一定是数组。
       至于如何通过varPtr获得的地址来获取数组值,自己百度一下。
       end funtion

情型5:用callbyname来模拟重载  这个有点鸡肋,意义不大。

发表评论 评论 (2 个评论)

回复 t小宝 2014-7-3 15:25
很山寨
回复 tmtony 2014-7-8 09:19
  

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

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

GMT+8, 2024-4-26 22:52 , Processed in 0.063703 second(s), 18 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回顶部