【发布时间】:2018-09-29 07:31:40
【问题描述】:
我有以下 VBA 代码:
Function InputElmt(element As Double) As Variant
InputElmt = element
End Function
Sub runInputElmt()
Dim arr() As Variant, Firstelmt As Double
arr = Array(1, 2)
Debug.Print InputElmt(arr(0) * 1) ' 1st call
Firstelmt = arr(0)
Debug.Print InputElmt(Firstelmt) ' 2nd call
Debug.Print InputElmt(arr(0)) ' 3rd call: error
End Sub
sub 调用函数InputElmt 3 次。前两个产生正确的结果,而最后一个会导致错误(请参阅compile error)。
我的解释是第三次调用将arr(0) 的字符串传递给函数,而不是对其求值。相反,在前两个调用中,arr(0) 被评估。
我的问题是
1) 我的解释正确吗?和
2) 此错误是否与错误消息所指示的 ByRef 或 ByVal 相关?
【问题讨论】:
-
第三次调用不传字符串,加一个
Debug.Print TypeName(arr(0))。所以严格来说,恕我直言,第一个问题的答案是否定的。第二个问题(我不太明白)的答案是 原因是 VBA 默认通过引用传递变量,这意味着数据类型必须在调用者和被调用者之间完全匹配。另见documentation。