我正在尝试使用“CurrentRegion”构建2D数据数组。
Function ProcessData()
Dim dataList()
dataList = Range("A1").CurrentRegion
' TODO Process the dataList
End Function
当我在Visual Basic(Run / F5)中测试它时,它工作得很好;我的dataList构建没有问题。但是,如果我将工作表中的单元格设置为:
= ProcessData()
该功能在“CurrentRegion”步骤中无声地失败。为什么会这样?我该如何解决这个问题?
答案 0 :(得分:5)
如果从Excel单元格(即作为用户定义的函数/ UDF)调用函数,则只能访问通过参数传递给函数的范围。对其他范围的任何访问(以及.CurrentRegion
是一个范围)将导致“循环引用”可能取消执行。
此外,在UDF中,您无法修改工作表上的任何内容 - 但只返回函数的结果!
有关详细信息,请查看此link。
答案 1 :(得分:0)
我刚遇到这个Q& A有同样的问题。我认为在UDF中使用CurrentRegion
存在一种错误,其原因并不像Peter在回答中所说的那样。
比较这两个功能:
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
这两个函数都使用不同类型的范围引用。如果彼得是对的,两者都应该返回错误结果。因此,请查看下面的数据范围和两个函数的结果。正如您所看到的,第二个功能结果是预期的和正确的。