Excel VBA计算方法不更新数组公式;显示为#N/A

标签 excel array-formulas vba

我在 Excel 中有一系列相互关联的数组公式。它们会自动调整大小以适应通过专有 Excel 插件生成的一系列数据。

但是,每当我的代码将某些数组公式重写为正确的新大小时,单元格都会显示为 #N/A,直到您编辑工作表上的另一个不相关单元格、保存工作表或按 F9。

使用Application.Calculate、ActiveSheet.Calculate等代码没有任何效果。

但是,使用 SendKeys“{F9}”可以。

例如,工作表上有两个公式:

={IF(LEN(INDEX(A:A, ROW()))>0,ROW(A:A)+2)}

={LARGE(OFFSET($J$1,0,0,ROW()),1)}

第一个公式在以编程方式写入一系列单元格后工作正常。它只是告诉我其中包含文本的单元格的行号。

第二个公式在以编程方式写入一系列单元格后不起作用。它为我提供了之前在数字列表中看到的最大行号(这是第一个公式的输出)。如果我按 F9,第二个公式会正确更新。如果我在 VBA 中执行 Application.Calculate,则不会发生任何情况。我还尝试了工作表级别可用的各种其他重新计算方法,但没有运气。

有人遇到过类似的事情吗?

编辑: 调整大小代码本质上可以归结为这样的代码(删除所有支持代码,使我能够对其进行更通用的调用):

首先,我愿意:

formula = dataSheet.Cells(startRow, startColumn).formula

然后:

Set DeleteRange = dataSheet.Range(dataSheet.Cells(startRow, startColumn), dataSheet.Cells(bottomBound, rightBound))
DeleteRange.ClearContents
Set DeleteRange = Nothing

然后:

Set resultRange = dataSheet.Range(dataSheet.Cells(startRow, startColumn), dataSheet.Cells(startRow + Height - 1, startColumn + Width - 1))
resultRange.FormulaArray = formula
Set resultRange = Nothing

简而言之,我复制了公式,清除范围,然后重写它。

最佳答案

如果你无法击败他们,那就加入他们。

SendKeys "{F9}"

关于Excel VBA计算方法不更新数组公式;显示为#N/A,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9163877/

相关文章:

javascript - 为 Excel 编写一个新函数

google-sheets - 使用 IMPORTRANGE 作为数组公式

excel可扩展公式用于多列条件求和

google-sheets - 在 Google Sheets 中,如何根据在不同列中拆分字符串的结果聚合值(MAX、MIN、AVERAGE)?

excel - 按索引号引用工作簿

vba - 从 Excel 发送多封电子邮件

Excel VBA .查找范围异常

excel - 当您可以只使用 "=+"时,为什么要在 Excel 单元格中使用 "="?

arrays - 如何在 VBA 中重新保存锯齿状数组(数组中的数组)?

ms-access - MS Access VBA 交叉表报告图例排序顺序