[英]How to get objects and VBA functions to work in Excel for Office 365?
[英]In Office 365, How to get an Excel array function to spill and render properly in the worksheet using VBA
在 Excel 2019 和 Office 365 中,MS 对数组函数进行了更改,使其至少不那么严格。
假设我有以下 VBA function
Public Function fooo(a As Integer, b As Integer) As Variant
Dim mat() As Integer
ReDim mat(0 To a - 1, 0 To b - 1) As Integer
Dim i As Integer
Dim j As Integer
For i = 0 To a - 1
For j = 0 To b - 1
mat(i, j) = a
Next j
Next i
fooo = mat
End Function
和 go 到工作表中,然后在单元格中键入=fooo(4,4)
。 我所要做的就是按 Enter,而不是 control-shift-enter,然后 Excel 执行我的数组 function,给我留下一个 4 x 4 的 4 数组。 到目前为止,一切都很好。
现在,如果我从 VBA 尝试以下操作
Public Sub tryit()
Range("a40").FormulaArray = "=fooo(3,10)"
Range("a40").Calculate
End Sub
我在单元格 a40 中看到 3,但没有看到矩阵的 rest。 只有当我单击单元格并按 Enter 时,矩阵的 rest 才会出现。
继续前进,我现在可以尝试这样的事情
Public Sub tryit2()
Dim i As Integer
For i = 1 To 10
Range("a40").FormulaArray = "=fooo(" & (i + 3) & "," & (i + 3) & ")"
Application.Wait Now + TimeValue("0:00:01")
Next i
End Sub
如果单元格 a40 包含之前的矩阵,则此代码会愉快地覆盖那里的矩阵。 是的,当然,有一些#N/As,但我可以忍受。 但是,如果该单元格以前是新鲜的,则 Excel 仅显示第一个数字。
它几乎看起来像 Excel 为结果预分配了一个单元块,而不是 VBA。
如何让初始数组 function 从 VBA 显示?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.