0

我在理解 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 中获得以下范围: 在此处输入图像描述

我需要从 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

谢谢干杯

4

2 回答 2

1

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
于 2018-12-13T08:46:49.657 回答
0

@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
于 2018-12-13T09:15:59.603 回答