【发布时间】:2016-11-07 22:19:36
【问题描述】:
我正在使用运行良好的 QueryTables 将 Excel 工作表链接到数据源。我想引入逻辑来检查给定的单元格并确定该单元格是否是现有 QueryTable 的左上角。这在概念上似乎微不足道,但在实践中证明是难以捉摸的。如果我尝试检查与 QueryTable 相关的单元格的任何属性,则会出现错误。即,如果rng 未链接到 QueryTable,rng.querytable 将引发错误 1004。所以我根据我在网上找到的一些讨论来测试rng.ListObject is nothing。事实证明,rng.ListObject 是某个单元格是一个表,即使该表不是 QueryTable。所以那里没有骰子。
那么如何测试目标单元格是否包含 QueryTable?
这是我从Mr. Excel 获得的函数存根:
Public Function IsRangeInQueryTable(rngCheck As Range) As Boolean
Dim QT As QueryTable
For Each QT In rngCheck.Parent.QueryTables
If Not Intersect(rngCheck, QT.ResultRange) Is Nothing Then
IsRangeInQueryTable = True
Exit Function
End If
Next QT
'If it got to here then the specified range does not lie
'in the result range of any query
IsRangeInQueryTable = False
End Function
上面的函数在很多情况下都有效,但是如果我的 QueryTables 已经与它们的目的地分离(这在实践中似乎发生),代码会抛出错误 1004,因为 QueryTable 没有目的地。以下是 QueryTable 与目的地分离时手表显示的内容:
FWIW,我还尝试以相反的方式处理此问题并遍历工作表中的每个 QueryTable。事实证明,如果有一个 QueryTable 的目的地被删除,询问 QueryTable 的QueryTable.Destination 会引发应用程序错误。所以我也想不出一种可靠的方法来实现这种方法。
【问题讨论】: