计算工作表中的行数

ash*_*hta 7 excel vba excel-vba

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

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

ctr = Range("B2", Range("B2").End(xlDown)).Count
Run Code Online (Sandbox Code Playgroud)

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

recct = ThisWorkbook.Sheets("Sheet1").Range("B2", Range("B2").End(xlDown)).Count
Run Code Online (Sandbox Code Playgroud)

我正进入(状态 run time error 1004 Application -Defined or Defined error

谢谢

Sco*_*man 9

错误发生在第二个范围参考中recct.因为您引用了不同的工作表,所以需要告诉VBA两个范围引用中的工作表名称.

试试这个:

With ThisWorkbook.Sheets("Sheet1")    
    recct = .Range("B2", .Range("B2").End(xlDown)).Rows.Count    
End With
Run Code Online (Sandbox Code Playgroud)

或者,这也会起作用(虽然有点邋)).

recct = ThisWorkbook.Sheets("Sheet1").Range("B2", ThisWorkbook.Sheets("Sheet1").Range("B2").End(xlDown)).Rows.Count
Run Code Online (Sandbox Code Playgroud)

更新

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

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

With ThisWorkbook.Sheets("Sheet1")

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

End With
Run Code Online (Sandbox Code Playgroud)

  • @DanielCook - >此代码没有问题,因为它解决了用户的问题.当然有使用`.End`的警告,但由于用户提供了代码,我必须假设他知道他在做什么.换句话说,`.End(xlDown)`,如果您现在正在使用数据集,则可以完全有效. (2认同)
  • @ScottHoltzman我不同意,我认为这不是OP所要求的.他们表明了他们想做什么,然后展示了他们的尝试.他们没有说他们尝试的是正确的方法. (2认同)

Ves*_*per 4

您可以使用这个例如:

rowsInThere = Sheets("Sheet1").UsedRange.Rows.Count
Run Code Online (Sandbox Code Playgroud)

这在没有范围的情况下工作。您也可以用作ActiveSheet检查工作表,以防您需要更改当前工作表并检查其行数。

  • 您可以使用它,但是如果 `Range("B2").End(xlDown)` 和 `UsedRange` 中的最后一个单元格之间有空白单元格,您将不会返回您期望的行数! (2认同)