8

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

4 回答 4

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
于 2012-10-26T13:49:47.423 回答
4

例如,您可以使用它:

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

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

于 2012-10-26T13:48:19.287 回答
2

两件事情

  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
于 2012-10-26T13:56:48.683 回答
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)"
于 2014-06-03T17:02:54.220 回答