【问题标题】:Passing variants/arrays as arguments for a function将变体/数组作为函数的参数传递
【发布时间】:2015-07-28 03:08:20
【问题描述】:

示例代码;

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 和 result2 都能正常运行,但是在 VBA 中情况并非如此,如果你尝试运行它,你会得到 ​​p>

“编译错误:Byref 参数类型不匹配”来自 result2;我认为这与计算函数参数内部值的限制有关

所以我的问题是:有没有一种简单的方法可以让 result2 工作,以便变体引用只解析到指定的元素?

【问题讨论】:

    标签: vba excel


    【解决方案1】:

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

    你可以使用

    CLng(testdata(2, 1)) 
    

    将其转换为 Long。

    所以:

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

    应该没问题

    【讨论】:

      【解决方案2】:

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

      你可以通过设置接收参数ByVal来解决这个问题,这意味着它无论如何都不应该是可写的:

      Function testfunction2(ByVal num As Long) As Long
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-12
        • 2015-09-22
        • 2021-02-23
        • 1970-01-01
        • 2013-01-20
        • 2012-12-07
        • 2016-06-12
        相关资源
        最近更新 更多