我的VBA代码与Excel 2010中的ListObjects一起使用。 表中的公式是SUMIFS,它根据前几列(参数)的值对数据求和。
当我获得新数据时,宏会执行以下例程:
ISSUE: 公式不应该出现在第3步之前,但它们就好像我从未删除它们一样。 就像listobject有某种缓存一样。
有没有人遇到过类似的问题?
如果没有人知道你头脑中的快速提示,我会制作一个示例文件。 另外,我在这里研究了很多,谷歌一般,到目前为止还没有找到任何东西。
感谢您提前做出任何回复!
亲切的问候 拉纳
答案 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
这应该解决你的问题