Excel表listobject有一些caching吗? 重新填充已删除的公式

我的VBA代码与Excel 2010中的ListObjects一起使用。表中的公式是SUMIFS,根据前几列(参数)的值汇总数据。

当我得到一个新的数据,macros做下面的例程:

  • 1-删除表的整个DataBodyRange
  • 将2个新数据粘贴到参数列(这些是文本值)
  • 3-分析新数据的粒度并编译新的公式
  • 4填充公式。

问题:公式不应该出现在第3步之前,但他们的行为就像我从来没有删除它们一样。 这就像listobject有一些caching内存。

有没有人遇到类似的问题?

如果没有人知道您的头顶上的快速提示,我会做一个示例文件。 另外,我在这里已经研究了很多和google一般的,到目前为止还没有find任何东西。

提前谢谢您的回复!

亲切的问候拉娜

是。 这取决于你如何删除行。

如果删除是与

ListObject.ListRows(n).Delete 

只有数据被删除,公式引用,这实际上是结构化的引用不像常规的Excel公式,维护。

你需要完全删除它,你可以做类似的事情

 ListObject.DatabodyRange.ClearContents ListOBject.DatabodyRange.Rows().Delete 

这应该照顾你的问题

它绝对记得ListColumn中是否有公式。 我不确定它是一个caching还是ListColumn的一个未公开的属性。 如果明确地将listcolumn设置为vbNullString,则可以有效地清除caching。

这是12列ListObject,其中第12列有一个公式。 如果没有vbNullString赋值,第12列将填充公式。 现在,公式已经丢失。

 Sub TestLOFormulas() Dim lo As ListObject Dim arr(1 To 1, 1 To 11) As Variant Set lo = Sheet1.ListObjects(1) lo.DataBodyRange.EntireRow.Delete 'This line clears the 'cache' lo.ListColumns(12).Range.Value = vbNullString arr(1, 1) = 1 arr(1, 2) = 1 arr(1, 3) = 1 arr(1, 4) = 1 arr(1, 5) = 1 arr(1, 6) = 1 arr(1, 7) = 1 arr(1, 8) = 1 arr(1, 9) = 1 arr(1, 10) = 1 arr(1, 11) = 1 lo.InsertRowRange.Resize(1, 11).Value = arr End Sub