什么是包含隐藏行和隐藏列的范围中的最后一个可见行

我写在下面

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个可见的行。 我们不知道哪些是可见的。 我们也不知道这些可见的行是否包含数据或者是空的。

我们能做的最好的是从底部开始循环表格。

当我们遇到一个既可见又非空的行时,停止并报告行号。