示例代码;
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工作,以便变量引用解析为指定的元素?
答案 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