计算工作表中的行数

时间:2012-10-26 13:42:14

标签: excel excel-vba vba

我想从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

由于

4 个答案:

答案 0 :(得分:9)

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并直接在下面计算连续单元格的数量

但是,如果你想在B列中找到最后一个“真正的”用过的单元格(通过实际,我的意思是其中包含数据),请执行以下操作:

With ThisWorkbook.Sheets("Sheet1")

    recct = .Range("B2", .Range("B" & .Rows.Count).End(xlUp)).Rows.Count

End With

答案 1 :(得分:2)

您可以使用它,例如:

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

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

答案 2 :(得分:2)

两件事

  1. 在工作时,您需要完全符合您的范围
  2. 始终自上而下测量最后一个单元格而不是自上而下 - 您可能有间隙
  3. <强>码

    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
    

答案 3 :(得分:1)

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

Dim TR as long, TC as long

TR = [Sheet1!A1].CurrentRegion.Rows.count
TC = [Sheet1!A1].CurrentRegion.Columns.count

如果我知道如果我处理的数据集没有空行或列,比如来自其他程序或其他内容的摘录,那么它很快且效果很好! 从这里我可以指定范围选择或执行vlookup。

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