Excel VBA函数在Visual Basic中工作,但在Worksheet中失败

Der*_*rek 2 excel vba excel-vba

我正在尝试使用"CurrentRegion"构建2D数据阵列.

Function ProcessData()
Dim dataList()
dataList = Range("A1").CurrentRegion
' TODO Process the dataList
End Function
Run Code Online (Sandbox Code Playgroud)

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

= ProcessData()
Run Code Online (Sandbox Code Playgroud)

该功能在"CurrentRegion"步骤中无声地失败.为什么会这样?我该如何解决这个问题?

Pet*_*ert 5

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

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

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

  • @DavidZemens:我指的是UDF,即从公式中调用的VBA函数.此函数不允许以任何方式修改工作表,也不允许与用户交互 - 但仅根据输入参数计算结果.然而,从工作表调用的子(例如,通过按钮或事件)可以修改工作表.这不是"不好的做法") (2认同)