excel 确定ActiveCell是否在特定表中

nwlls2ji  于 2022-11-26  发布在  其他
关注(0)|答案(5)|浏览(148)

我试图通过Excel 2013中的VBA确定ActiveCell是否不仅仅在任何表中,而是在特定的表中。
下面是代码,但只检测任何表中的ActiveCell。注解掉的行是我要找的,但显然它不起作用。

...
    Set rng = Intersect(.EntireRow, ActiveCell.ListObject.DataBodyRange)
    'Set rng = Intersect(.EntireRow, ActiveCell.ListObjects("myTable").DataBodyRange)
    On Error GoTo 0
        If rng Is Nothing Then
            MsgBox "Please select the cell of a row within the consensus input table.", vbCritical, "Delete Evaluator"
        Else
    ...

对于正确的语法有什么建议吗?
谢谢你!

xienkqul

xienkqul1#

要测试 ActiveCell 是否在 Table1 的正文中,请执行以下操作:

Sub qwerty()

   If Intersect(ActiveCell, ActiveSheet.ListObjects("Table1").DataBodyRange) Is Nothing Then
      MsgBox "activecell not in Table1"
   Else
      MsgBox "activecell in Table1"
   End If

End Sub
o7jaxewo

o7jaxewo2#

更通用的解决方案,适用于其他表

Sub Demo()
    Dim r As Range
    Dim lo As ListObject

    Set r = ActiveCell
    Set lo = r.ListObject
    If Not lo Is Nothing Then
        Select Case lo.Name
            Case "Table1"
                If r.Row = lo.Range.Row Then
                    MsgBox "In Table1 Header"
                Else
                    MsgBox "In Table1 Body"
                End If
            Case "SomeOtherTable"
                '...
        End Select
    Else
        MsgBox "Not in any table"
    End If
End Sub
0qx6xfy6

0qx6xfy63#

通常,我们对在表的DataBodyRange中执行的工作感兴趣,Excel为我们提供了表的该区域的快捷方式。对于名为“myTable”的表,您可以使用[myTable]在代码中直接访问DataBodyRange。
因此,对于ActiveCell的包含表位置测试,可以如下进行测试:

If Not Intersect(ActiveCell, [myTable]) Is Nothing Then
o0lyfsai

o0lyfsai4#

Range对象有一个ListObject属性,该属性将返回Range的表格。您所要做的就是测试该单元格是否在任何表格中:

If ActiveCell.ListObject Is Nothing Then
    ...

并查看它是否在您特定表中:

If ActiveCell.ListObject.Name = "MyTable" Then
    ...

就大功告成了!
比使用Application.Intersect(...)干净得多。chris neilsen's的回答也暗示了这一点。

clj7thdc

clj7thdc5#

我使用下面的代码行:

ActiveCell.ListObject.Name

或sub:

Sub IsActiveCellInTable()
    'If active cell in table then get name'
    Dim strTblName As String

        'Disable error checking'
        On Error Resume Next 

        strTblName = ActiveCell.ListObject.Name

        'Reset error checking'
        On Error GoTo 0 

        If strTblName <> "" Then
            MsgBox "Cell (" & ActiveCell.Address & ") is included in: " & strTblName
        Else
            MsgBox "Cell (" & ActiveCell.Address & ") is not included in table."
        End If

    End Sub

相关问题