Arrays 数组大小限制在VBA中传递数组参数
Excel VBA 2007似乎对作为参数传递的数组的大小有64k限制 有人知道修复或解决方法吗 代码如下:Arrays 数组大小限制在VBA中传递数组参数,arrays,vba,excel,Arrays,Vba,Excel,Excel VBA 2007似乎对作为参数传递的数组的大小有64k限制 有人知道修复或解决方法吗 代码如下: Public Function funA(n) Dim ar() ReDim ar(n) funA = ar End Function Public Function funB(x) funB = UBound(x) End Function 从Excel: =funB(funA(2^16-1)) '65536 as expected =funB
Public Function funA(n)
Dim ar()
ReDim ar(n)
funA = ar
End Function
Public Function funB(x)
funB = UBound(x)
End Function
从Excel:
=funB(funA(2^16-1)) '65536 as expected
=funB(funA(2^16)) 'Gives a #VALUE
从内部看,funA()工作正常,但如果传递给funB,参数x是一个错误。这似乎是我能找到的最接近解决方法。执行来自VBA的函数间调用 如果你做这样的东西
Public Function funBA(n As Variant) As Variant
funBA = funB(funA(n))
End Function
它似乎可以工作到n=2^24=2^8^3(这看起来不像VBA中的任何数据类型断点,这是挂起的地方,但这是一个相当大的数组)这不是VBA的问题,因为您可以运行它并且不会出错
Public Sub test()
x = funB(funA(2 ^ 16 - 1))
y = funB(funA(2 ^ 16))
Debug.Print x; y
End Sub
这似乎是一个将其传回Excel的问题—文档不多,但似乎是Excel的限制
这里是另一个链接,但没有解决方案
还有一个
我认为这是电子表格单元格本身的限制,而不是VBA。Excel可以在函数之间传递大于2^16的数组,但显然它不能在单元格中包含这样大小的数组 作为一个实验,在单元格公式中突出显示
funA(2^16)
,然后点击F9-它会给你一个“#值!”代码>错误
由于公式在启动funB
之前已经计算了funA
的结果,因此它尝试对已计算为错误的函数运行funB
这似乎是一个类似Brad posted的解决方案(即,第三个函数本身计算funB(funA(n))
),在计算完成之前将单元格排除在方程之外,因此它工作正常 由于一维数组作为一行列传回Excel,因此列数达到了Excel 2007的限制(64K)
如果将数组设为二维并作为行返回,则它应该可以工作:
Public Function funA(n)
Dim ar()
ReDim ar(n,1)
funA = ar
End Function
或者,您可以使用转置将数组从一行旋转到一列,但这可能比首先创建二维数组的效率要低。这里有一些背景。你到底需要用UDF做什么?这将指导我们的建议。参考资料看起来像问题的变体。我需要用udf做的事情和你看到的差不多,除了数组将充满数字(一个样本分布),funB用它做有趣和令人兴奋的事情。Yee-Hah!就这样。很好的捕捉。一个2-D列数组dim'D(n,1)实际上是原始代码所使用的,它表现出完全相同的症状。为了简化这个例子,我把它简化为一维。也许我不该这么做。你使用VBA函数是正确的。C XLL函数不会出现这种情况,因此,将VBA变量数组转换回Excel单元格的代码中似乎存在缺陷:这还没有针对大网格进行更新。我收回这一点。它在VBE中运行良好-我不知道第一次尝试时失败的原因。