我正在尝试创建一个函数,它可以接受范围或数组来执行一些进一步的计算。当数组通过时,该函数工作正常,但是当该函数在工作表中的范围内使用时,它会给我值!错误。
我的代码如下所示:
Function COMRET(data as variant, N as integer)
Dim nrows as long
If IsArray(data) Then
N = UBound(data,1)
Else
N = data.rows.count
End If
'... some other calculations here
End Function
问题似乎来自上面数组的标识...当我注释掉上面的 IF 部分时,代码的其他部分似乎没问题。不知道我在这里做错了什么。感谢您的帮助。谢谢!
您的声明是正确的data as Variant
.
当你将一个范围传递给它时,它将作为 Variant/Object/Range 正确传递,但事情会变得有点复杂。
你打电话时IsArray
,这只是一个函数,它会尝试使用默认属性 https://stackoverflow.com/a/18051644/11683已过的Range
对象,即Value
. IsArray(Range.Value)
如果范围由多个单元格组成,则为 True。但是当你打电话时UBound
,这是一个非常特殊的函数,因为它被突出显示为关键字,它不会尝试获取data.Value
并将运行于data
直接,并且data
是单身Range
对象,所以它不能有上限(而它的.Value
can).
您需要正确检测您正在传递的内容:
Public Function COMRET(data As Variant, N As Integer)
Dim nrows As Long
If TypeOf data Is Range Then
N = data.Rows.Count
ElseIf IsArray(data) Then
N = UBound(data, 1)
Else
' ???
End If
End Function
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)