我想从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
由于
答案 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)
两件事
<强>码强>
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)"