如何在VBA过程中使用可选的数组参数?

时间:2010-02-15 10:47:01

标签: vba default parameters optional

我在MS Access的VBA脚本中有一个私有过程:

Private Sub drawLineDiagram(chartSpace As Variant, title As String, caption As String, x_val() As Variant, y_val() As Variant, Optional y_val2() As Variant = ????)

如您所见,我希望为值数组提供可选的最后一个参数。

我必须指定哪种默认参数?如果我用一个可选的整数值来做,并指定它,例如0一切都很好。

如果我使用如上所示的数组并指定一个数组,则该行标记为红色=>作为错误(它不会编译)。

4 个答案:

答案 0 :(得分:11)

如果您需要VBA中的可选数组,请将其声明为Variant而不指定数组,但无论如何都要将其作为数组访问。通过这种方式,您可以得到Variant(单个变量),其中包含Variant个数组,而不仅仅是Variant个数组。不需要默认值:

Private Sub drawLineDiagram(chartSpace As Variant, title As String, caption As String, x_val As Variant, y_val As Variant, Optional y_val2 As Variant)

为了保持一致性,还要将其他两个参数声明为普通Variant

如果您讨厌IDE,请不要使用它。 使用记事本。然后粘贴书面代码。

答案 1 :(得分:5)

也许你想要一个参数数组:

  

在程序声明中,定义   正常方式的参数列表。   除最后一个之外的所有参数   必须要求(不是可选的(视觉   基本))。

     

使用前面的最后一个参数名称   关键字ByVal ParamArray。这个   参数是自动可选的。   请勿包含Optional关键字。

- How to: Overload a Procedure that Takes an Indefinite Number of Parameters (Visual Basic)

VBA参考:Understanding parameter arrays

答案 2 :(得分:1)

IDE可能用处不大,但帮助(一次)包含答案:
的ParamArray
可选的。仅用作arglist中的最后一个参数,以指示最终参数是Variant元素的Optional数组。 ParamArray关键字允许您提供任意数量的参数。 ParamArray不能与ByVal,ByRef或Optional一起使用。

答案 3 :(得分:1)

有一个更简单但不一定更好的答案。塞巴斯蒂安说:“如果我使用上面显示的数组进行操作并分配一个数组,该行将被标记为红色=>作为错误(并且不会编译)。”

您的代码包括“ Optional y_val2()As Variant = ????”。您不需要那里的“()”即可将Variant数组用作参数。因此,如果您真的想那样做,可以例如使用“ Optional y_val2 = FALSE”之类的东西。

最初传递参数时,如果要传递数组,只需确保那个是Variant数组。

我确实认为不使用默认值更为优雅,因此我总体上同意GSerg的回答(并支持该问题和原始问题)。

对于GSerg和spinjector,是的,您可以使用“ If IsArray(YourOptionalVariantParameter)Then”检查可选参数,但是如果使用的是Variant, “ IsMissing(YourOptionalVariantParameter)方便且优雅,可能更快一些,可以在(仅当)将Variant作为参数传递时使用,以检查其是否存在。< / p>

如果执行“ IsArray(YourOptionalVariantParameter)”并且不存在此类参数,那么我们要做的就是检查不存在的变量是否为数组。如果您使用默认参数值,例如FALSE(如我的第一个示例),则首先检查变量是否为数组确实很有意义。

顺便说一句,我不同意您需要将所有参数声明为Variants以获得一致性。变体的效率不如其他类型,因此我认为仅在必要时使用。