我想从Sheet1代码模块中计数Sheet2中的行数。
在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
谢谢
发布于 2012-10-26 05:49:47
该错误发生在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-26 05:48:19
例如,您可以使用此方法:
rowsInThere = Sheets("Sheet1").UsedRange.Rows.Count
这是没有范围的。此外,您还可以使用ActiveSheet
作为工作表进行检查,以防需要更改当前工作表并检查其行数。
发布于 2012-10-26 05:56:48
两件事
码
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
https://stackoverflow.com/questions/13088090
复制