如何实现VBA中函数的可变参数传递

来源:互联网 发布:ubuntu arm 编辑:程序博客网 时间:2024/05/20 19:19

请看下面函数参数的说明:

[Optional]   [ByVal   |   ByRef]   [ParamArray]   varname[(   )]   [As   type]   [=   defaultvalue] 

  

  部分   描述   

  Optional   可选的。表示参数不是必需的。如果使用了该选项,则   arglist   中的后续参数都必须是可选的,而且必须都使用   Optional   关键字声明。如果使用了   ParamArray,则任何参数都不能使用   Optional   声明。   

  ByVal   可选的。表示该参数按值传递。   

  ByRef   可选的。表示该参数按地址传递。ByRef      Visual   Basic   的缺省选项。   

  ParamArray   可选的。只用于   arglist   的最后一个参数,指明最后这个参数是一个   Variant   元素的   Optional   数组。使用   ParamArray   关键字可以提供任意数目的参数。ParamArray   关键字不能与   ByValByRef,或   Optional   一起使用。   

  varname   必需的。代表参数的变量的名称;遵循标准的变量命名约定。   

  type   可选的。传递给该过程的参数的数据类型;可以是   ByteBooleanIntegerLongCurrencySingleDoubleDecimal(目前尚不支持)、Date String(只支持变长)、Object      Variant。如果参数不是   Optional,则也可以是用户定义类型,或对象类型。   

  defaultvalue   可选的。任何常数或常数表达式。只对于   Optional   参数时是合法的。如果类型为   Object,则显式缺省值只能是   Nothing  

 

那么如何实现呢?

Option Explicit

 

Function WYQSum(ParamArray vals() As Variant)

    Dim val     As Variant

    Dim sigma   As Long

  

    sigma = 0

    For Each val In vals

        sigma = sigma + val

    Next

  

    WYQSum = sigma

End Function

 

注意:

1.以ParamArray宣称的参数数组必须以Variant修饰

2.遍历ParamArray数组的相关变量也必须以Variant修饰