gpt4 book ai didi

arrays - 有没有办法创建一个可以接受数组和范围作为输入的 VBA 函数?

转载 作者:行者123 更新时间:2023-12-02 01:04:39 25 4
gpt4 key购买 nike

我正在尝试创建一个函数,它可以接受范围或数组来执行一些进一步的计算。当数组通过时,该函数工作正常,但是当该函数在工作表中的范围内使用时,它会给我值!错误。

我的代码如下:

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 部分时,代码的其他部分似乎没问题。不知道我在这里做错了什么。感谢您的帮助。谢谢!

最佳答案

您将数据声明为 Variant 是正确的。
当你将一个范围传递给它时,它将作为 Variant/Object/Range 正确传递,但事情会变得有点复杂。

当您调用IsArray(这只是一个函数)时,它会尝试使用 default property传递的 Range 对象,即 Value。如果 Range 由多个单元格组成,则 IsArray(Range.Value) 为 True。但是,当您随后调用 UBound(这是一个非常特殊的函数,因为它被突出显示为关键字)时,它不会尝试获取 data.Value 而是对 进行操作>data 直接,并且 data 是单个 Range 对象,因此它不能有上限(而它的 .Value 可以)。

您需要正确检测您正在传递的内容:

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

关于arrays - 有没有办法创建一个可以接受数组和范围作为输入的 VBA 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57159554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com