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
我在理解 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