Excel 区域返回的行数不正确

Excel 区域返回的行数不正确,excel,listobject,vba,Excel,Listobject,Vba,我有一个VBA应用程序,可以从网站下载所有HTML表格,并将它们解析为工作表。然后我编写了代码,在a列的每个表的标题中找到一个字符串,激活该单元格,标识currentregion的范围,并将listobject名称添加到工作表名称管理器中。我遇到的问题是代码行260,其中消息框显示表中的行数。即使表的行数不同,数字也始终相同。我认为问题在于代码行210到250。我搜索了整个网络,包括堆栈溢出,但找不到解决方案 有人知道为什么消息框中显示的数字不能反映表中的行数吗 '---------------

我有一个VBA应用程序,可以从网站下载所有HTML表格,并将它们解析为工作表。然后我编写了代码,在a列的每个表的标题中找到一个字符串,激活该单元格,标识currentregion的范围,并将listobject名称添加到工作表名称管理器中。我遇到的问题是代码行260,其中消息框显示表中的行数。即使表的行数不同,数字也始终相同。我认为问题在于代码行210到250。我搜索了整个网络,包括堆栈溢出,但找不到解决方案

有人知道为什么消息框中显示的数字不能反映表中的行数吗

'---------------------------------------------------------------------------------------
' Method : test_currentregion_IncludeHeaders
' Author : Richard
' Date   : 10/4/2016
' Purpose: Find cell with value and turn into named table with headers
'---------------------------------------------------------------------------------------
Sub test_currentregion_IncludeHeaders()

10        On Error GoTo test_currentregion_IncludeHeaders_Error

          'convert all tables (listobjects) to ranges
          Dim WS As Worksheet, LO As ListObject
20        For Each WS In Worksheets
30            For Each LO In WS.ListObjects
40                LO.Unlist
50            Next
60        Next

          'find currentregions and add table
          Dim tbl As Object
          Dim c As Object
          Dim firstAddress As Variant
          Dim Hdr As String
          Dim rngTable As Range
          Dim rows As Long
          Dim Line As Variant
          Dim iCounter As Long

70        Hdr = "Header"
80        iCounter = 1
90        rows = 0

100       With ThisWorkbook.Worksheets(1).Range("A:A")
110           Set c = .Find(Hdr, LookIn:=xlValues)
120           If Not c Is Nothing Then
130               firstAddress = c.Address
140               c.Select        'must select object
150           End If

160       Do

170       With ThisWorkbook.Worksheets(1)
180           Set rngTable = c.CurrentRegion
190           .ListObjects.Add(SourceType:=xlSrcRange, Source:=rngTable, _
              xlListObjectHasHeaders:=xlYes, TableStyleName:="TableStyleMedium1") _
              .Name = "List" & iCounter
200       End With

210       With ThisWorkbook.Worksheets(1).ListObjects(1)
220           For Each Line In .Range.SpecialCells(xlCellTypeVisible).Areas
230               rows = rows + Line.rows.Count
240           Next
250       End With

260       MsgBox "Number of rows displayed = " & rows

          'reset selected variables
270           iCounter = iCounter + 1
280           rows = 0
290           Set Line = Nothing

          'find next currentregion
300           Set c = .FindNext(c)
310       Loop While Not c Is Nothing And c.Address <> firstAddress
320    End With

330       On Error GoTo 0
340       Exit Sub

test_currentregion_IncludeHeaders_Error:

350       MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure_test_currentregion_IncludeHeaders of Sub current_region"

End Sub
'---------------------------------------------------------------------------------------
'方法:测试\u电流区域\u包括导线
作者:理查德
“日期:2016年4月10日
'用途:查找具有值的单元格并转换为具有标题的命名表
'---------------------------------------------------------------------------------------
子测试\u当前区域\u包括表头()
10 On Error GoTo test\u currentregion\u IncludeHeaders\u错误
'将所有表(listobjects)转换为范围
将WS设置为工作表,将LO设置为ListObject
工作表中的每个WS各20个
WS.ListObjects中的每个LO为30
40 LO.未上市
50下一个
60下一个
'查找当前区域并添加表
作为对象的Dim tbl
作为对象的dimc
Dim firstAddress作为变量
Dim Hdr作为字符串
可调暗范围
模糊的行和长的行一样
变暗线
暗淡的i计数器
70 Hdr=“收割台”
80 i计数器=1
90行=0
100本工作簿。工作表(1)。范围(“A:A”)
110设置c=.Find(Hdr,LookIn:=xlValues)
120如果不是,那么c什么都不是
130 firstAddress=c.地址
140 c.选择“必须选择对象”
150如果结束
160做
170与此工作簿一起使用。工作表(1)
180设置rngTable=c.CurrentRegion
190.ListObjects.Add(SourceType:=xlSrcRange,Source:=rngTable_
XLListObjectHashHeaders:=xlYes,TableStyleName:=“TableStyleMedium1”)_
.Name=“List”&i计数器
200以
210使用此工作簿。工作表(1)。列表对象(1)
220用于.Range.SpecialCells(xlCellTypeVisible)区域中的每行
230行=行+行.rows.Count
240下一个
250结束于
260 MsgBox“显示的行数=”&行
'重置所选变量
270 i计数器=i计数器+1
280行=0
290设置行=无
'查找下一个当前区域
300集合c=.FindNext(c)
310循环,而不是c为Nothing,c为Address firstAddress
结束于
330错误转到0
340出口接头
测试\u电流区域\u包括导线\u错误:
350 MsgBox“错误”和错误编号(“&Err.Description&”)在程序“测试”当前区域“包括子当前区域的标题”中
端接头

您遇到的问题是,您总是引用第一个ListObject
。ListObjects(1)

您可以访问范围所属的Listobject并返回其行数(不包括标题),如下所示:


rows=rngTable.ListObject.DataBodyRange.rows.Count

您遇到的问题是您总是引用第一个ListObject
。ListObjects(1)

您可以访问范围所属的Listobject并返回其行数(不包括标题),如下所示:


rows=rngTable.ListObject.DataBodyRange.rows.Count

我在OneDrive上添加了一个指向启用宏的工作簿的链接。欢迎访问该网站!请包含显示问题所需的代码的最小部分。查看以获取更多有关提问的信息,这些问题将吸引高质量的答案。
test\u currentregion\u IncludeHeaders
不太大,无法在您的帖子中使用。我在OneDrive上提供了一个指向启用宏的工作簿的链接。欢迎访问该网站!请包含显示问题所需的代码的最小部分。查看更多有关提问的信息,这些问题将吸引高质量的答案。
test\u currentregion\u IncludeHeaders
不太大,无法在您的帖子中使用。