2012-10-26 57 views
6

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

在相同的代码

谢谢

+1

感谢Scott Holtzman我试过你的代码,它确实有效。再次感谢。以及所有评论过的人。 –

+0

你可能比你讨价还价,灰!但欢迎来到SO。能够如此迅速地学习是件好事。给出以下所有答案,无论您认为最适合您的需求,请点击它下面的空白复选标记将其标记为已接受。这有助于未来的其他人知道哪些对您最有帮助。 –

回答

2

您可以使用此例如:

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

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

+1

这并没有回答这个问题 - 对于B列 – brettdj

+2

中最后一个使用过的单元格B2,您可以使用它,但是如果在Range(“B2”)。End(xlDown)'和'UsedRange'中的最后一个单元格将不会返回您期望的行数! –

+0

不,问题是“我要计算Sheet1上的行数”,这是一个答案(备用答案,不使用他的方法来检查行)。对Scott而言,这取决于工作表中的数据,以及OP的意图。我见过“行数”期间,我将此作为答案。 – Vesper

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

只有这样的问题是,如果B2后没有数据,则会得到1048575(Excel 2010),并忽略第一行。 –

+2

@DanielCook - >这个代码没有问题,因为它解决了用户问题。当然有使用'.End'的警告,但是由于用户提供了代码,我必须假设他知道他在做什么。换句话说'.End(xlDown)',如果你现在使用的是数据集,那么它可以是完全有效的。 –

+1

+1忽略了你的答案是全面引用'Sheet1' - 你编辑了你的初始文章吗? – brettdj

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 
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)"