什么是包含隐藏行和隐藏列的范围中的最后一个可见行
我写在下面
ThisWorkbook.Worksheets("Sheet1").Range("tblInsurance").SpecialCells(xlCellTypeVisible).Rows.Count
指向tblInsurance
表的最后一行。
我在方法参数中传递了ThisWorkbook.Worksheets("Sheet1").Range("tblInsurance")
:
General.CsvExportRange rngRange:=ThisWorkbook.Worksheets("Sheet1").Range("tblInsurance")
和CsvExportRange
方法包含rngRange.Rows.Count
行以查找范围的最后一行。
但是当到达隐藏行时,它将停止计数并返回隐藏行之前的最后一行的编号。
当我使用下面:
ThisWorkbook.Worksheets("Sheet1").Range("tblInsurance").SpecialCells(xlCellTypeVisible).Select
范围完全由范围内的可见区域周围的分离边界来select。
似乎问题出在.SpecialCells(xlCellTypeVisible).Rows.Count
– > count方法,当到达隐藏行时停止计数。
我正在阅读类似的post和networking讨论,但他们不包含以上主要问题。 (当范围包含隐藏行时,计算范围行以查找最后一个行号。)
这个问题是类似的,当我尝试计算包含一些隐藏列的范围列,例如,达到最后一个。
这个问题很有趣。 我从来没有想过这个问题。 尝试这个:
Sub test() Dim rngDB As Range, rng As Range Dim n As Integer, c As Integer, cnt As Integer Set rngDB = ThisWorkbook.Worksheets("Sheet1").Range("tblInsurance").SpecialCells(xlCellTypeVisible) c = rngDB.Columns.Count For Each rng In rngDB n = n + 1 Next cnt = n / c MsgBox cnt End Sub
如果你需要知道最后一个单元格的行数,试试这个:
Sub test2() Dim rngDB As Range, rng As Range Dim n As Integer Set rngDB = ThisWorkbook.Worksheets("Sheet1").Range("tblInsurance").SpecialCells(xlCellTypeVisible) n = rngDB.SpecialCells(xlCellTypeLastCell).Row MsgBox "My last row number is : " & n End Sub
我当然testing了。
编辑我明白你的问题。 试试这个。
Sub test3() Dim rngDB As Range, rng As Range Dim n As Integer, r as Long, c as Integer Set rngDB = ThisWorkbook.Worksheets("Sheet1").Range("tblInsurance").SpecialCells(xlCellTypeVisible) With rngDB r = .Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row C = .Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column Set rng = Range("a1", .Cells(r, C)) End With MsgBox "My last row number is : " & r End Sub
您可以使用Range.end(xlup).rowfind最后一个可见行; 如果a1:a100包含数据,但行A8:a100隐藏,则此代码将显示第7行
Sub lastvis() MsgBox Range("A1000").End(xlUp).Row End Sub
或者,如果使用表格,请尝试查找最后一个可见行。
Sub lastvis2() MsgBox Range("tblInsurance").End(xlDown).Row End Sub
可悲.Count没有得到我们很多的信息。 假设我们只有一列A1-A100 ,我们运行:
Sub dural() Dim r As Range, r2 As Range Set r = Range("A1:A100") Set r2 = r.SpecialCells(xlCellTypeVisible) MsgBox r2.Rows.Count End Sub
运行的时候,这个macros给我们4个 。
所有你知道的是在表中的某个地方有4个可见的行。 我们不知道哪些是可见的。 我们也不知道这些可见的行是否包含数据或者是空的。
我们能做的最好的是从底部开始循环表格。
当我们遇到一个既可见又非空的行时,停止并报告行号。