问题描述
我正在尝试(但失败)在 ListObject 的 HeaderRowRange 中找到给定的字符串。我想提取 ListObject-Column Count(而不是电子表格列数)。我正在尝试使用“.index”解决问题,但是,它遇到了错误。下面的代码有什么问题?
查看屏幕截图以更好地了解我的目标: 在 ListObject Column3 中是第 3 列,而在工作表中是第 6 列(F 列)。我希望代码中的 j 为 3(而不是 6)。
Sub MWE()
Dim wb As Workbook: Set wb = ThisWorkbook
Dim ws As Worksheet: Set ws = wb.Sheets("worksheet1")
Dim lo As ListObject: Set lo = ws.ListObjects("table1")
Dim j As Long: j = lo.HeaderRowRange.Find("Column3",LookIn:=xlValues,LookAt:=xlWhole).Index
End Sub
解决方法
除了listobject table
之外还有几种方法可以访问hearderRow
中的列,希望你觉得有用
Sub tt()
Dim tb1 As ListObject
Dim rcol As Range
Set tb1 = Sheet1.ListObjects("Table1")
Set rcol = tb1.ListColumns("Ctry").DataBodyRange
Debug.Print rcol(3).Value 'Hawaii
End Sub
,
.Find
返回一个范围对象。这是你正在尝试的吗?
Option Explicit
Sub Sample()
Dim wb As Workbook: Set wb = ThisWorkbook
Dim ws As Worksheet: Set ws = wb.Sheets("worksheet1")
Dim lo As ListObject: Set lo = ws.ListObjects("Table1")
Dim aCell As Range
Set aCell = lo.HeaderRowRange.Find("Column3",LookIn:=xlValues,LookAt:=xlWhole)
If Not aCell Is Nothing Then
MsgBox aCell.Column
End If
End Sub
或者,您也可以使用 Application.Match
Option Explicit
Sub Sample()
Dim wb As Workbook: Set wb = ThisWorkbook
Dim ws As Worksheet: Set ws = wb.Sheets("worksheet1")
Dim lo As ListObject: Set lo = ws.ListObjects("Table1")
Dim j As Long: j = Application.Match("Column3",lo.HeaderRowRange,0)
MsgBox j
End Sub
PS:您的代码中也有错别字。 Dim lo As listoject
应该是 Dim lo As ListObject
编辑
查看屏幕截图以更好地理解我的目标:在 ListObject Column3 中是第 3 列,而在工作表中是第 6 列(F 列)。我希望代码中的 j 为 3(而不是 6)。
在这种情况下,如果您的表格不是从 Col A
开始,那么您将不得不进行范围调整。将第一个代码中的 MsgBox aCell.Column
更改为 MsgBox aCell.Column - lo.HeaderRowRange.Column + 1
。
输出
,因为我知道列标题的名称,所以我可以简单地使用此代码来获取 ListObject 中的列数:
j= lo.ListColumns("Column3").Index