vba excel listobject HeaderRowRange

vba excel listobject HeaderRowRange

我在理解 HeaderRowRange 的工作原理时遇到了一些问题。 让我们来看看: 根据文档:

headersRowrange 是一个范围

所以这应该有效:

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)

我真正需要做的是在此 listObject 中获取以下范围:

我需要列表对象的 header 范围从 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))

但是不行。 为什么?

我在 sheet(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

谢谢 干杯

D1 已经是一个有效的范围地址,所以如果你想用任何 Range 对象引用它,请不要命名它(不确定你在这里使用,因为我认为它无论如何都不是有效的。你可以使用查找。另外,为什么在 ftsTbl 的末尾有 D1?

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

@QHarr 的解决方案post解决了这个问题: 此外,可以通过这种方式构建从 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