vba excel listobject HeaderRowRange - PullRequest
       26

vba excel listobject HeaderRowRange

0 голосов
/ 13 декабря 2018

У меня возникли проблемы с пониманием того, как работает HeaderRowRange.Посмотрим: согласно документации:

enter image description here

headersRowrange - это Range

, поэтому это должно работать:

Dim ftsTbl As ListObject
    Set ftsTbl = ThisWorkbook.Sheets(1).ListObjects(1)

MsgBox ("ftsTbl.HeaderRowRangeD1:" & ftsTbl.HeaderRowRange("D1").Address)

но это не так.(неверный вызов процедуры или аргумент) Почему?и следующее не работает:

MsgBox ("ftsTbl.HeaderRowRangeD1:" & ftsTbl.HeaderRowRange("D1").item(1).Address)

Что мне действительно нужно сделать, так это получить следующий диапазон в этом списке объекта: enter image description here

Мне нужен диапазонзаголовок списка объектов от столбцов D1 до D6.Я думал, что я мог бы использовать Range (cell1, cellX) следующим образом:

Dim ftsTbl As ListObject
    Set ftsTbl = ThisWorkbook.Sheets(1).ListObjects(1)
Dim DocsHeadersRange As Range
    'Set DocsHeadersRange = ThisWorkbook.Sheets(1).Range(ftsTbl.HeaderRowRange("D1"), ftsTbl.ListColumns("D6").DataBodyRange.iTem(ftsTbl.ListRows))

Но это не работает.Почему?

Я определяю несколько диапазонов в листе (1), чтобы использовать их в

Sub Worksheet_SelectionChange(ByVal Target As Range)

Set Overlap = Intersect(***defined range of listobject***, Selection)
If Not Overlap Is Nothing Then
If Overlap.Areas.Count = 1 And Selection.Count = Overlap.Count Then
...etc

Спасибо Cheers

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Пост решения @QHarr решает проблему: кроме того, можно построить диапазон от D1 до конца объекта списка следующим образом:

Dim DocsHeadersRange As Range
Set DocsHeaders
Range = ThisWorkbook.Sheets(1).Range(ftsTbl.ListColumns("D1").Range.Cells(1, 1), ftsTbl.ListColumns(ftsTbl.ListColumns.Count).Range.Cells(1, 1))
MsgBox DocsHeadersRange.Address
0 голосов
/ 13 декабря 2018

D1 уже является допустимым адресом диапазона, поэтому не называйте его, если вы хотите сослаться на него с помощью какого-либо объекта Range (не уверен насчет его использования здесь, так как я не думаю, что он действителен в любом случае. Вы можете использовать FindКроме того, почему у вас есть D1 в конце ftsTbl?

Public Sub TEST()
    Dim ftsTbl As ListObject
    Set ftsTbl = ThisWorkbook.Sheets(1).ListObjects(1)
    Debug.Print ftsTbl.HeaderRowRange.Find("D1").Address
End Sub

Вы также можете использовать ListColumns:

Debug.Print ftsTbl.ListColumns("D1").Range.Cells(1, 1).Address

Затем вы можете использовать что-то вроде

Debug.Print ThisWorkbook.Worksheets("Sheet1").Range(ftsTbl.ListColumns("D1").Range.Cells(1, 1), ftsTbl.ListColumns("D6").Range.Cells(1, 1)).Address

или

Debug.Print ThisWorkbook.Worksheets(ftsTbl.Parent.Name).Range(ftsTbl.ListColumns("D1").Range.Cells(1, 1), ftsTbl.ListColumns("D6").Range.Cells(1, 1)).Address
...