计算工作表中的行数
我想从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
两件事情
- 当工作表中,你需要完全限定你的范围
- 总是测量最后一个单元格而不是自上而下 – 您可能有空白
码
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)"