我有以下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有关吗?
答案 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
变量,在此过程中,应用变体将导致不匹配错误。