Excel表listobject有某种缓存吗?重新填充已删除的公式

时间:2014-07-03 17:00:39

标签: excel vba

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

当我获得新数据时,宏会执行以下例程:

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

ISSUE: 公式不应该出现在第3步之前,但它们就好像我从未删除它们一样。 就像listobject有某种缓存一样。

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

如果没有人知道你头脑中的快速提示,我会制作一个示例文件。 另外,我在这里研究了很多,谷歌一般,到目前为止还没有找到任何东西。

感谢您提前做出任何回复!

亲切的问候 拉纳

2 个答案:

答案 0 :(得分:1)

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

这是一个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

答案 1 :(得分:0)

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

如果您删除

ListObject.ListRows(n).Delete

只删除数据,维护公式引用,它们实际上是不同于常规Excel公式的结构化引用。

您需要完全删除它,您可以执行类似

的操作
ListObject.DatabodyRange.ClearContents
ListOBject.DatabodyRange.Rows().Delete

这应该解决你的问题