首页 > 解决方案 > vba:从第 3 行选择表以结束 listobject

问题描述

以这种方式为列表对象选择整个工作表

ws.ListObjects.Add(xlSrcRange, Range("$A$1").CurrentRegion, , xlYes).Name = "Cost"

但现在我想要相同的,但从第 3 行开始:

Dim rng As Range
Dim crng As Range
Set crng = ws.Range("$A$1").CurrentRegion
Set rng = ws.Range(ws.Range("A3"), ws.Range(crng.Columns, crng.Rows))

ws.ListObjects.Add(xlSrcRange, rng, , xlYes).Name = "Eval"

但这也选择了整个范围。如何选择正确的范围?

标签: excelvba

解决方案


有两种情况 - 当表格存在于“A3”范围内或那里没有表格时。

  • 当表存在时

我已设法A3使用以下代码从表格末尾选择:

Sub TestMe()

    Dim ws As Worksheet
    Set ws = Worksheets(1)

    Dim myRange As Range

    With ws
        Set myRange = .Range(.Range("A3"), .Range("A3").End(xlToRight))
        Set myRange = .Range(myRange, myRange.End(xlDown))
    End With

    myRange.Select
    Stop
    'Uncomment the line below, if there is no table.
    'ws.ListObjects.Add(xlSrcRange, myRange, , xlYes).Name = "Eval40"
End Sub

但是,如果您取消注释代码的最后一行,您将看到1004错误,其中指出“一个表不能与另一个表重叠”,这是有道理的,因为新表Eval40已命名为旧表的一部分存在。

  • 当表不存在时 如果范围内没有现有表,则可以正常工作:

在此处输入图像描述


推荐阅读