VBA ссылка на несколько столбцов в таблице - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь установить таблицу в VBA, однако я хочу установить диапазон только для определенных столбцов в таблице.Кажется, я не могу понять, как это сделать.Все, что я ищу, похоже, возвращает ссылки на таблицы Excel, и это не похоже на правильный синтаксис для VBA.Это то, что у меня есть, но я получаю ошибку времени выполнения '9': нижний индекс выходит за пределы диапазона.

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

edit: я не думаю, что мой вопрос был ясен.Я пытаюсь сослаться на определенный диапазон в таблице, потому что я использую vlookup, чтобы найти данные, которые я ищу.Я ссылаюсь на информацию во втором столбце и получаю информацию в столбце 8 для установки переменной.Поэтому я пытаюсь сделать листобетоном таблицу в более крупной таблице.

1 Ответ

0 голосов
/ 07 февраля 2019

Вы используете ListObjects("TableName") для ссылки на всю таблицу.Затем ListColumns("ColumnHeading") для ссылки на конкретные столбцы в таблице, где «ColumnHeading» - это фактическое имя заголовка в таблице (или ListColumns(#), где # - это номер индекса столбца).Затем DataBodyRange для ссылки на диапазон данных столбца.

Вместо VLookup было бы лучше использовать Match для нахождения номера строки и Range.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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...