在将数组元素传递给VBA中的函数时要求评论

时间:2018-09-29 07:31:40

标签: excel-vba

我有以下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

子程序调用函数InputElmt三次。前两个产生正确的结果,而最后一个产生错误(请参见compile error)。

我的解释是,第三个调用将字符串arr(0)传递给函数,而不是函数的评估。相反,在前两个调用中arr(0)被评估。

我的问题是

1)我的解释正确吗?和

2)此错误与错误消息可能表明的ByRef或ByVal有关吗?

2 个答案:

答案 0 :(得分:3)

您有两个选择

第一

Function InputElmt(ByVal element As Double) As Variant
    InputElmt = element
End Function

第二

Debug.Print InputElmt((arr(0)))       ' 3rd call: no error with parentheses

注意括号

  

将参数放在自己的括号中会强制求值   作为一种表达方式。

有关更多信息,请查看documentation

答案 1 :(得分:1)

您的第二个变量是 var str = '<rect xmlns="http://www.w3.org/2000/svg" id="SvgjsRect1008" class="selected" width="124" height="89" stroke="#3399ff" stroke-width="2" fill-opacity="1" fill="#3399ff" x="236" y="160" name="dawdawad"></rect>' var parser = new DOMParser(); var doc = parser.parseFromString(str, "image/svg+xml"); ,但是第三个变量是variant。您的用户定义函数需要一个double变量,在此过程中,应用变体将导致不匹配错误。