首页 > 解决方案 > 表中的 VBA 多列引用

问题描述

我正在尝试在 VBA 中设置一个表,但是,我只想将范围设置为表中的特定列。我似乎不知道该怎么做。我搜索的所有内容似乎都返回了 excel 表引用,而且它似乎不是 VBA 的正确语法。这就是我所拥有的,但我得到一个运行时错误'9':下标超出范围。

Set Contact = Worksheets("Tables").ListObjects("Table1[[Column2]:[Column8]]")

编辑:我不认为我的问题很清楚。我正在尝试引用表中的某个范围,因为我正在使用 vlookup 来查找我正在寻找的数据。我正在引用第二列中的信息并获取第 8 列中的信息以设置为变量。所以我试图将 listobject 设置为更大的表格中的表格。

标签: excelvba

解决方案


ListObjects("TableName")用来引用整个表。然后ListColumns("ColumnHeading")引用表中的特定列,其中“ColumnHeading”是表中的实际标题名称(或ListColumns(#)其中#列的索引号)。然后DataBodyRange引用列数据的范围。

而不是使用查找行号和 a来获得结果VLookup会更好。MatchRange.Cells

像这样的东西

Sub Demo()
    Dim lo As ListObject
    Dim SearchRange As Range
    Dim LookupRange As Range
    Dim SearchTerm As Variant
    Dim LookupItem As Variant
    Dim idx As Variant

    Set lo = Worksheets("Tables").ListObjects("Table1")
    Set SearchRange = lo.ListColumns("Column2").DataBodyRange
    Set LookupRange = lo.ListColumns("Column8").DataBodyRange

    SearchTerm = "YourSearchTerm"
    idx = Application.Match(SearchTerm, SearchRange, 0)
    If Not IsError(idx) Then
        LookupItem = LookupRange.Cells(idx, 1)
        ' use the result as you wish
        Debug.Print LookupItem
    Else
        ' SearchTerm not found.  What now?
    End If

    'For completeness, heres how to reference a range of columns
    Dim VLookupRange As Range
    Set VLookupRange = lo.Parent.Range(lo.ListColumns("Column2").DataBodyRange, lo.ListColumns("Column8").DataBodyRange)
    Debug.Print VLookupRange.Address

End Sub

推荐阅读