这个问题有一个更简单但不一定更好的答案。Sebastian 说:“如果我使用如上所示的数组并分配一个数组,则该行将标记为红色 => 为错误(并且不会编译)。”
您的代码包括“可选 y_val2() As Variant = ????”。您不需要那里的“()”来将 Variant 数组作为参数。因此,如果您真的想这样做,您可以使用诸如“可选 y_val2 = FALSE”之类的东西。
最初传递参数时,如果你想传递一个数组,那么只需确保它是一个 Variant 数组。
我确实认为不在那里使用默认值会更优雅,所以我一般同意 GSerg 的回答(并赞成这个问题和原始问题)。
但是对于 GSerg 和 spinjector,是的,您可以使用“If IsArray(YourOptionalVariantParameter) Then”来检查可选参数,但如果您使用的是 Variant,“ IsMissing (YourOptionalVariantParameter)”很方便且优雅,可能会更快一点,并且可以在(且仅当)将 Variant 作为参数传递时使用,以检查它是否存在。
如果您执行“IsArray(YourOptionalVariantParameter)”并且不存在这样的参数,那么我们所做的就是检查不存在的变量是否是数组。如果您使用 FALSE 之类的默认参数值(如在我的第一个示例中),那么首先检查变量是否为数组是有意义的。
顺便说一句,我不同意您需要将所有参数声明为 Variants 以保持一致性。我认为,变体的效率低于其他类型,因此应仅在必要时使用。