我在下面写了
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
范围完全由围绕范围内可见区域的分隔边界选择。
似乎问题出在.SpecialCells(xlCellTypeVisible).Rows.Count
- > 计数方法,该方法在到达隐藏行时停止计数。
我正在阅读类似的帖子和网络讨论,但它们不包含上述主要问题。 (计算范围行以查找最后一个行号,当范围包含隐藏行时。)
当我尝试计算包含某些隐藏列的范围列时,此问题与此问题类似,例如 - 到达最后一列。
答案 0 :(得分:2)
您可以使用Range.end(xlup).row查找最后一个可见行;如果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
答案 1 :(得分:1)
这个问题很有意思。我从未想过这个问题。 试试这个:
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
我当然测试了。
修改强> 我理解你的问题。试试这样。
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
答案 2 :(得分:0)
可悲的是, .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
运行时,宏会为我们提供 4 。
你所知道的就是表格中有4个可见行。我们不知道哪些是可见的。我们也不知道这些可见行是否包含数据或是否为空。
我们所能做的最好的事情就是从底部开始遍历表格。
当我们遇到可见和非空的行时,请停止并报告行号。
答案 3 :(得分:0)
.SpecialCells(xlCellTypeVisible)返回一个多区域范围。您可以使用Range.Areas属性访问每个区域。 official documentation for Range.Count给出了以下示例:
Sub DisplayColumnCount()
Dim iAreaCount As Integer
Dim i As Integer
Worksheets("Sheet1").Activate
iAreaCount = Selection.Areas.Count
If iAreaCount <= 1 Then
MsgBox "The selection contains " & Selection.Columns.Count & " columns."
Else
For i = 1 To iAreaCount
MsgBox "Area " & i & " of the selection contains " & _
Selection.Areas(i).Columns.Count & " columns."
Next i
End If
End Sub