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来模拟重载 这个有点鸡肋,意义不大。