我正在使用效果很好的QueryTables将Excel工作表链接到数据源。我想介绍一下逻辑来检查给定的单元格并确定该单元格是否是现有QueryTable的左上角。这在概念上看似微不足道,但在实践中已被证明难以捉摸。如果我尝试检查与QueryTable相关的单元格的任何属性,则会收到错误消息。即,如果rng.querytable未链接到QueryTable,则rng引发错误1004。因此,根据我在网上找到的一些讨论,我搞砸了rng.ListObject is nothing的测试。事实证明,即使单元格是表,即使该表不是QueryTable,rng.ListObject还是一样。所以那里没有骰子。

那么,如何测试目标单元格是否包含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


上面的函数在许多情况下都有效,但是如果我的QueryTable已从其目标分离(这似乎在实践中发生),则该代码将引发错误1004,因为QueryTable没有目标。这是当QueryTable与目标解耦时手表显示的内容:

excel - 确定单元格是否通过Excel中的VBA链接到QueryTable-LMLPHP

FWIW,我还尝试过相反的方法,并遍历工作表中的每个QueryTable。事实证明,是否有一个QueryTable的目标已删除,要求QueryTable的QueryTable.Destination引发应用错误。因此,我也找不到一种可靠的方法来执行该方法。

最佳答案

这比需要的要复杂,但是由于“ OnError”语句会重定向所有错误,因此我想消除意外处理错误错误的可能性,例如,如果rngNothing

Public Function cell_has_query(rng As Range) As Boolean

    If rng Is Nothing Then
       cell_has_query = False
       Exit Function
    End If

    If rng.ListObject Is Nothing Then
        cell_has_query = False
        Exit Function
    End If

On Error GoTo ErrHandler
    If Not rng.ListObject.QueryTable Is Nothing Then
        cell_has_query = True
    End If
    Exit Function

ErrHandler:
    If Err.Number = 1004 Then 'Application-Defined or Object-Defined Error
        cell_has_query = False
    Else
        On Error GoTo 0
        Resume
    End If
End Function


@JDLong VBA错误处理很奇怪。错误的默认设置为On Error GoTo 0,这意味着(取决于您的VBA IDE设置;工具->选项->常规)将弹出一个未处理错误的消息框。如果要显式捕获并处理错误,请创建标签(例如“ ErrHandler”),然后通过以Exit Function结尾的函数来确保正常无法访问代码段。在标签后面的代码块中,您可以检查Err对象属性,然后选择Resume重试导致错误的代码行,Resume Next在出现错误的代码行之后运行,或者简单地处理错误并让函数正常退出。您还可以通过将模式设置回On Error GoTo 0,然后再Resume重新设置该行来重新产生错误。

关于excel - 确定单元格是否通过Excel中的VBA链接到QueryTable,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40475709/

10-10 05:16