计算工作表中的行数

我想从Sheet2代码模块中计数Sheet1中的行数。

sheet1代码模块中,下面的代码工作正常

ctr = Range("B2", Range("B2").End(xlDown)).Count 

我在Sheet2代码模块中尝试了相同的代码

 recct = ThisWorkbook.Sheets("Sheet1").Range("B2", Range("B2").End(xlDown)).Count 

我得到run time error 1004 Application -Defined or Defined error

谢谢

错误发生在recct的第二个范围参考中。 由于您正在引用不同的工作表,因此您需要将两个范围参考中的工作表名称告诉VBA。

试试这个:

 With ThisWorkbook.Sheets("Sheet1") recct = .Range("B2", .Range("B2").End(xlDown)).Rows.Count End With 

另外,这也可以工作(虽然有点斜坡)。

 recct = ThisWorkbook.Sheets("Sheet1").Range("B2", ThisWorkbook.Sheets("Sheet1").Range("B2").End(xlDown)).Rows.Count 

更新

由于关于表单中行数的实际含义有很多讨论,所以使用上面的代码从字面上从B2开始,并计算直接在下面的连续单元格的数量

然而,如果你想find列B中的最后一个“真正的”使用的单元格(真实的,我的意思是在其中的数据)做到这一点:

 With ThisWorkbook.Sheets("Sheet1") recct = .Range("B2", .Range("B" & .Rows.Count).End(xlUp)).Rows.Count End With 

两件事情

  1. 当工作表中,你需要完全限定你的范围
  2. 总是测量最后一个单元格而不是自上而下 – 您可能有空白

 Sub GetB() Dim ws As Worksheet Set ws = Sheets(1) Dim lngCnt As Long lngCnt = ws.Range(ws.[b2], ws.Cells(Rows.Count, "b").End(xlUp)).Count End Sub 

更强大

为了清楚地处理所有情况, Find更容易

 Sub GetB() Dim ws As Worksheet Dim rng1 As Range Set ws = Sheets(1) Set rng1 = ws.Range("B:B").Find("*", ws.[b1], xlValues, , , xlPrevious) If Not rng1 Is Nothing Then Select Case rng1.Row Case 1 MsgBox "Only B1 has data", vbCritical Case 2 MsgBox "No used cells past B2" Case Else MsgBox rng1.Row - 1 & " cells between B2 and B" & rng1.Row End Select Else MsgBox ws.Name & " column B Is blank", vbCritical End If End Sub 

你可以使用这个例子:

 rowsInThere = Sheets("Sheet1").UsedRange.Rows.Count 

这工作没有范围。 你也可以使用ActiveSheet作为工作表来检查,以防需要更改当前工作表并检查其行数。

不知道这是否会有所帮助,但我一直在我的模块中使用这个:

 Dim TR as long, TC as long TR = [Sheet1!A1].CurrentRegion.Rows.count TC = [Sheet1!A1].CurrentRegion.Columns.count 

如果我知道,如果我正在处理的数据集没有空的行或列,就像从另一个程序或其他东西中提取的那样,那么它很快,而且效果很好! 从这里我可以指定一个范围select或执行一个查找。

 TR = [Sheet1!A1].CurrentRegion.Rows.count [I2] = "=vlookup($C2,'sheet1'!A$2:B$" & TR & ",2,FALSE)"