Rea*_*idy 20
使用usedrange方法是我的最爱之一,但需要小心对待.它有一些缺陷/陷阱.已知的问题是excel不能很好地跟踪使用范围.通过VBA对使用范围的任何引用都会将值重置为当前使用的范围.因此,在获得使用范围时尝试运行此子过程:
Dim lRowCount as Long
Application.ActiveSheet.UsedRange
lRowCount = Worksheets("MySheet").UsedRange.Rows.Count
Run Code Online (Sandbox Code Playgroud)
但请注意,这将为您提供已使用的范围计数,因此如果您的工作簿顶部有空白行(通常人们会为过滤条件等等留出空间),那么它们将不会被计算在内.usedrange方法也可能受格式化影响.
如果你想要使用最后一行,这是我想你想要的,那么你可以使用更可靠的find方法:
Dim rLastCell As Range
Dim lLastRow As Long
Set rLastCell = ActiveSheet.Cells.Find(What:="*", After:=.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False)
If Not rLastCell Is Nothing Then lLastRow = rLastCell.Row
Run Code Online (Sandbox Code Playgroud)
如果您知道至少有一个包含数据的单元格,那么您可以将上述内容简化为:
Dim lLastRow As Long
lLastRow = ActiveSheet.Cells.Find(What:="*", After:=.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row
Run Code Online (Sandbox Code Playgroud)
Ube*_*rue 13
你也可以尝试:
i = Sheets("SheetName").UsedRange.Rows.Count
Run Code Online (Sandbox Code Playgroud)
但是,如果您开始删除和清除行,这可能会产生一些问题.
更好的方法是:
i = Cells(Sheets("SheetName").Rows.Count, 1).End(xlup).Row
Run Code Online (Sandbox Code Playgroud)
这假设每行在第1列中都有数据.
| 归档时间: |
|
| 查看次数: |
79449 次 |
| 最近记录: |