15

目标:
变量应包含特定工作表中的行数。

问题:
我需要 Excel VBA 中的什么语法代码来计算工作表中的行数?

4

2 回答 2

25

使用 usedrange 方法是我的最爱之一,但需要小心处理。它有一些缺陷/陷阱。excel 不能很好地跟踪使用的范围是一个已知问题。通过 VBA 对使用范围的任何引用都会将该值重置为当前使用的范围。因此,当您获得使用的范围时,请尝试运行此子过程:

Dim lRowCount as Long

Application.ActiveSheet.UsedRange
lRowCount = Worksheets("MySheet").UsedRange.Rows.Count

但请注意,这将为您提供已使用的范围计数,因此如果您的工作簿顶部有空白行(人们通常会这样做,以便为过滤条件等内容留出空间),那么它们将不会被计算在内。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

如果您知道您至少有一个包含数据的单元格,那么您可以将上述内容简化为:

Dim lLastRow  As Long

lLastRow = ActiveSheet.Cells.Find(What:="*", After:=.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row

请参阅此处关于我上面谈到的使用范围

于 2012-07-21T22:17:21.440 回答
13

你也可以试试:

i = Sheets("SheetName").UsedRange.Rows.Count

但是,如果您开始删除和清除行,这可能会出现一些问题。

一个更好的方法是:

i = Cells(Sheets("SheetName").Rows.Count, 1).End(xlup).Row

这假设每一行在第 1 列中都有数据。

于 2012-07-21T21:49:49.250 回答