为什么可以使用附加参数调用返回 Variant 的函数?

Why can a function returning Variant be called with additional parameters?

这会产生编译时错误(参数数量错误):

Option Explicit

Sub Test()
    Call returnsBoolean(1)
End Sub

Function returnsBoolean() As Boolean
End Function

但是,这可以正常编译(并在从 returnsVariant 返回 后抛出 运行 时间错误

Option Explicit

Sub Test()
    Call returnsVariant(1)
End Sub

Function returnsVariant() As Variant
End Function

为什么?

希望这可以说明问题:

第一个例子

Option Explicit

Sub Test()
  Dim b as Boolean  
  b = returnsBoolean
  Debug.Print b(1) ' error, because b is not an array
End Sub

Function returnsBoolean() As Boolean
End Function

第二个例子

Option Explicit

Sub Test()
  Dim V as Variant
  V = returnsBoolean
  Debug.Print V(1) ' OK, because Variants can contain arrays
End Sub

Function returnsBoolean() As Variant
End Function

这是因为 (1) 被解释为数组索引而不是函数的参数。另一种思考方式是您的代码被解释为

(returnsBoolean())(1)

编辑

回复楼下评论,下面给出下标错误:

Option Explicit

Sub Test()
    returnsVariant 1, 2, 5
End Sub

Function returnsVariant() As Variant
 Dim x(1 To 1, 2 To 2, 3 To 3) As Long
 x(1, 2, 3) = 10
 Dim V As Variant
 V = x
 returnsVariant = V
End Function

所以 returnsVariant 1,2,5 被解释为 (returnsVariant())(1,2,5)。在我的 Excel 版本中,放置 1,2,3 会导致 VBA 崩溃并烧毁