我有一个简单的类,它执行 SQL 查询,然后用查询结果填充数组,接下来将其转换为 Range,最后创建了一个列表对象:
Dim data() As Variant
...
ReDim data(0 To rowCount, 1 To colCount)
... populating data
Set rng = Range("A1:" & ColumnLetter(colCount) & CStr(rowCount + 1))
rng = data << Exception is raised here
Dim Tbl As ListObject
Set Tbl = ActiveSheet.ListObjects.Add(xlSrcRange, rng, , xlYes)
我想要实现的是启用该查询返回Excel公式,例如,我可以添加到我的选择查询中:
SELECT
...
'=2*A1' AS COL1
它有效(= 2 * A1是愚蠢/无用的例子,但我想解释一下我的意思)。
现在,我想使用结构化参考公式,例如:
SELECT
...
T.SALE AS SALE,
'=[@Sale]/AGGREGATE(9;5;[Sale])' AS SALE_PART,"
...
但问题是 [Sale] 我对表列的引用 - 在数据填充时刻还不存在 - 因此 VBA 抛出异常 - “内存不足”。我不知道为什么内存不足,但我确定它与具有该公式的单元格有关(该公式之前的其他单元格已正确填充)。
所以 - 问题是 - 我可以暂时禁用某种公式验证(防止错误对话框)吗?然后我可以在创建列表对象后重新启用它,然后那些有问题的公式就会消失([Sale]成为有效参考)
我认为,问题与结构化参考文献有关。当我输入无效公式时,例如:
=xyz
没有错误对话框,但是这个公式不正确(#NAME?),但是当我输入:
=[xyz]
有一个对话框:(
您可以使用
Application.EnableEvents = False
禁用事件,但与其捏造和破坏事情只是为了稍后修复它们,为什么不从一开始就这样做呢?你似乎把事情不必要地复杂化了。如果您知道稍后将使用表格,请先创建一个不带任何数据的表格,以便您可以在公式中正确引用它。