通常,过程调用中的参数数目必须与过程规范中的数目相同。 如果一个过程在其规范中需要3个参数,则在调用该过程时,您必须准确传递3个参数,这些参数应具有特定的数据类型,并应按照该过程本身定义的正确顺序进行传递。 一个简单的例子将说明这一点:
Public Function fCalculateInterest(curPrincipal As Currency, sngRate As Single, lngTermInMonths As Long) As Currency
fCalculateInterest = curPrincipal * sngRate * lngTermInMonths
End Function
向fCalculateInterest()函数传递一个CURRENCY,SINGLE和LONG值,然后该函数将返回CURRENCY数据类型。
对该函数的典型调用可能类似于:
Dim curInterest As Currency
curInterest = fCalculateInterest(75000, .0675, 240)
通过使用ParamArray关键字,您可以指定过程将接受任意数量的参数。
每个ParamArray参数的参数可以具有不同的数据类型。
参数本身必须声明为类型变量数组。
进行调用时,调用中提供的每个参数都将成为变量数组的相应元素。
同样,一个简单的代码段将说明这一点。
将对fAverageNumbers()函数进行多次调用,每个调用具有不同数量的参数,有些甚至具有无效的参数。
函数定义以及几个调用和相关的输出将被演示:
Public Function fAverageNumbers(ParamArray varNumbers())
Dim varX, varY, intNumsToAverage As Integer
intNumsToAverage = 0
For Each varX In varNumbers
If IsNumeric(varX) And Not IsNull(varNumbers) Then
varY = varY + varX
intNumsToAverage = intNumsToAverage + 1
fAverageNumbers = varY / intNumsToAverage
Else
End If
Next
End Function
样本调用和输出:
Debug.Print fAverageNumbers(20, 80, 50) 'produces 50
Debug.Print fAverageNumbers(2, 4, 8, 16, 32, 64, 128, 256, 512) 'produces 113.555555555556
Debug.Print fAverageNumbers(98.765, 34.988, 1004.56) 'produces 379.437666666667
Debug.Print fAverageNumbers(Null, "Number", 500, 100) 'produces 300
Debug.Print fAverageNumbers(16) 'produces 16
注意:在我看来,ParamArray()语句是一种非常有价值且用途广泛的编程工具,每当不知道要传递给过程的参数的数量及其数据类型时,都可以使用它。
From: https://bytes.com/topic/access/insights/735467-using-paramarray