我有一个公共职能
Public Function kuc_1(Mj, R1, R2, S, J1, J2)
是否可以在不传递所有参数的情况下调用它, 例如:
kuc_1(1;5;5)
答案 0 :(得分:3)
使用 Optional
关键字来声明可选参数
要阐述我的评论,您可以在以下函数中指定Optional Arguments
:
Public Function kuc_1(Optional Mj, Optional R1, _
Optional R2, Optional S, _
Optional J1, Optional J2)
'/* your codes here */
End Function
要使用此功能,您可以省略您不需要的参数:
kuc_1(1;;2) '/* here you supply Mj and R2 and omit the rest of the arguments
注意:如果您的默认分隔符不是分号;
,请尝试使用逗号,
。我使用了分号,因为OP使用分号发布了样本用法。但是在VBE中,您使用逗号,
。
编辑1: 我收到了一条评论(以及对该问题的投票)因为我的帖子不清楚。 OP可能很清楚,但可能不是那些阅读它的人,特别是那些不熟悉VBA的人。因此,我会尽可能清楚地说明这一点。 :)
处理可选参数
在上面的代码中,我们只是声明参数是可选的。它并没有结束,因为我们需要在代码中处理可选参数。虽然它是可选的,但如果提供了可选参数,我们需要明确代码如何运行。
检查是否提供了可选参数 - 根据声明为Optional
的变量类型,有不同的方法可以执行此操作。例如,如果使用Variant
函数提供,则可以测试声明为IsMissing
的变量。请考虑以下事项:
Private Function cRept(text As String, number As Integer, _
Optional delimiter As Variant) As String
cRept = Join(Split(String$(number, "."), "."), delimiter & text)
cRept = Mid(cRept, Len(delimiter) + 1)
End Function
记下Optional
变量delimiter
。如果您不提供第三个参数Type mismatch error
,即使它是delimiter
,此代码将生成Optional
。要解决此问题,我们将使用IsMissing
。
Private Function cRept(text As String, number As Integer, _
Optional delimiter As Variant) As String
If IsMissing(delimiter) Then delimiter = ""
cRept = Join(Split(String$(number, "."), "."), delimiter & text)
cRept = Mid(cRept, Len(delimiter) + 1)
End Function
即使您提供delimiter
参数,上面的代码现在也会执行。以下是根据您拥有的可选变量类型进行检查的其他方法:
If a = "" Then a = "#N/A" '/* optional variable a declared as String */
If a = 0 Then a = 1 '/* optional variable a declared as Integer */
If a Is Nothing Then Set a = Application '/* optional variable a declared as Object */
设置可选参数的默认值 - 如果您已经知道在未提供可选参数的情况下分配可选参数,请执行此操作。
Private Function cRept(text As String, number As Integer, _
Optional delimiter As Variant = "") As String
'If IsMissing(delimiter) Then delimiter = ""
cRept = Join(Split(String$(number, "."), "."), delimiter & text)
cRept = Mid(cRept, Len(delimiter) + 1)
End Function
上面的代码现在将运行,即使我们省略了检查是否提供,因为我们在调用函数时将delimiter
的值初始化为""
并且未提供该参数。 / p>
使用可选参数调用函数 - 最简单的是省略可选参数。让我们回到OP的原始功能。以下是我们将如何在VBE和/或工作表中调用它。
kuc_1(1, ,2) '/* supplying Mj and R2 only */
kuc_1(, , , , ,4) '/* supplying last argument J2 only */
在VBA中使用它(在VBE中运行)时,可以使用语法<argument name>:=
在许多可选参数中提供特定参数。上面的最后一个例子可以写成:
kuc_1(J2:=4) '/* we specify what optional argument we are supplying */
免责声明:上面的函数cRept
用于重复字符串,就像工作表函数REPT
一样。第三个参数实际上没有必要,但用于演示可选参数。 子>