将变量/数组作为函数的参数传递

时间:2015-07-27 18:38:39

标签: vba excel-vba excel

示例代码;

Sub functiontester()

Dim testdata As Variant
Dim answer As Long
Dim result1 As Long

testdata = Sheets("worksheet1").Range("E1:E2").Value

result1 = testfunction(testdata)

result2 = testfunction2(testdata(2, 1))

End Sub

Function testfunction(stuff As Variant) As Long

    testfunction = stuff(2, 1)

End Function

Function testfunction2(num As Long) As Long

    testfunction2 = num

End Function

所以从我在python中的日子开始,我期待result1&结果2都运行良好,但在VBA中不是这种情况,如果你试图运行它,你得到

"编译错误:Byref参数类型不匹配"来自result2;我假设它与函数参数中的值计算限制有关

所以我的问题是:是否有一种简单的方法可以使result2工作,以便变量引用解析为指定的元素?

2 个答案:

答案 0 :(得分:2)

CLng(testdata(2, 1)) 可能是Double类型,而不是Long类型。

您可以使用

result2 = testfunction2(CLng(testdata(2, 1)))

将它投射到Long。

所以:

{{1}}

应该没问题

答案 1 :(得分:2)

"compile error: Byref argument type mismatch"实际上是指它不会隐式为您转换数据类型,因为ByRef参数(默认值)应该是可写的。如果写入转换后的参数,则从函数/子例程返回时会丢失,因为转换后的值只是临时值,它们不在被调用函数之外的任何变量中。

您可以通过创建接收参数ByVal来解决此投诉,这意味着它无论如何都不应该是可写的:

Function testfunction2(ByVal num As Long) As Long