2

我正在尝试使用“CurrentRegion”构建一个二维数据数组。

Function ProcessData()
Dim dataList()
dataList = Range("A1").CurrentRegion
' TODO Process the dataList
End Function

当我在 Visual Basic (Run/F5) 中测试它时,效果很好;我的 dataList 构建没有问题。但是,如果我将工作表中的一个单元格设置为:

= ProcessData()

该函数在“CurrentRegion”步骤中静默失败。为什么会这样?我该如何补救?

4

2 回答 2

5

如果从 Excel 单元格调用函数(即作为用户定义函数/UDF),则只能访问通过参数传递给函数的范围。对其他范围(并且是一个范围)的任何访问.CurrentRegion都将导致执行的“循环引用”潜在取消。

此外,在 UDF 中,您不能修改工作表上的任何内容 - 只能返回函数的结果!

有关更多详细信息,请查看此链接

于 2013-03-26T20:45:41.177 回答
0

我刚刚遇到这个Q&A有同样的问题。我认为在 UDF 中使用存在一种错误,CurrentRegion原因并不像彼得在他的回答中所建议的那样。

比较这两个函数:

Function GetAddressOfColumn(TopCell As Range)
    GetAddressOfColumn = TopCell.CurrentRegion.Address
End Function


Function GetAddressOfColumnOK(TopCell As Range)
    GetAddressOfColumnOK = Range(TopCell, TopCell.End(xlDown)).Address
End Function

两个函数都使用不同类型的范围引用。如果彼得是对的,那么两者都应该返回错误的结果。所以,看看下面的数据范围和两个函数的结果。如您所见,第二个函数结果符合预期且正确。

在此处输入图像描述

于 2013-12-03T22:12:07.790 回答