2012-10-26 5 views
6

Tôi muốn đếm số hàng trong Trang tính 1, từ mô-đun mã Sheet2.Đếm số hàng trong trang tính

Trong mô-đun mã sheet1, đoạn mã sau hoạt động tốt

ctr = Range("B2", Range("B2").End(xlDown)).Count 

tôi đã cố gắng cùng mã trong Sheet2 đang mô-đun

recct = ThisWorkbook.Sheets("Sheet1").Range("B2", Range("B2").End(xlDown)).Count 

Tôi nhận run time error 1004 Application -Defined or Defined error

Cảm ơn

+1

Cảm ơn Scott Holtzman Tôi đã thử mã của bạn và nó hoạt động. Cảm ơn một lần nữa. và mọi người đã nhận xét. –

+0

Bạn có thể có nhiều hơn bạn mặc cả cho, tro! Nhưng chào mừng bạn đến với SO. Thật tuyệt vời khi có thể học được rất nhanh. Đưa ra tất cả các câu trả lời dưới đây, cho dù bạn cảm thấy phù hợp nhất với nhu cầu của mình, hãy đánh dấu nó là được chấp nhận bằng cách nhấp vào dấu kiểm trống bên dưới. Điều này giúp những người khác trong tương lai biết điều gì đã giúp bạn tốt nhất. –

Trả lời

2

Bạn có thể sử dụng ví dụ:

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

này hoạt động mà không dao động. Ngoài ra, bạn có thể sử dụng ActiveSheet làm trang tính để kiểm tra, trong trường hợp bạn cần thay đổi trang tính hiện tại và kiểm tra các hàng của nó.

+1

Điều này không trả lời câu hỏi - đặc biệt là B2 đối với ô được sử dụng lần cuối trong cột B – brettdj

+2

bạn có thể sử dụng, nhưng nếu có ô trống giữa 'Phạm vi (" B2 "). Cuối (xlDown)' và ô cuối cùng trong 'UsedRange' bạn sẽ không trả về số hàng bạn mong đợi! –

+0

Không, câu hỏi là "Tôi muốn đếm số hàng trên Sheet1", và đây là một câu trả lời (một câu trả lời thay thế, không sử dụng phương pháp của mình để kiểm tra hàng). Và với Scott, điều này phụ thuộc vào dữ liệu trong các trang tính, và bất kỳ ý định nào mà OP có. Tôi đã nhìn thấy "số hàng" thời gian, tôi đưa ra điều này như là câu trả lời. – Vesper

9

Lỗi xảy ra trong tham chiếu phạm vi thứ 2 trong recct. Vì bạn đang tham chiếu một trang tính khác, bạn cần phải nói cho VBA tên trang tính trong cả hai tham chiếu phạm vi.

Hãy thử điều này thay vì:

With ThisWorkbook.Sheets("Sheet1")  
    recct = .Range("B2", .Range("B2").End(xlDown)).Rows.Count  
End With 

Ngoài ra, điều này sẽ làm việc tốt (mặc dù một sloppier bit).

recct = ThisWorkbook.Sheets("Sheet1").Range("B2", ThisWorkbook.Sheets("Sheet1").Range("B2").End(xlDown)).Rows.Count 

Cập nhật

Vì có rất nhiều cuộc thảo luận xung quanh những gì bạn thực sự có ý nghĩa theo số lượng hàng trên trang tính, sử dụng mã ở trên để theo nghĩa đen bắt đầu từ B2 và đếm số lượng các tế bào tiếp giáp trực tiếp bên dưới

Tuy nhiên, nếu bạn muốn tìm các "thực" được sử dụng ô cuối cùng trong cột B (bởi thực tế, tôi muốn nói với các dữ liệu trong nó) làm điều này:

With ThisWorkbook.Sheets("Sheet1") 

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

End With 
+1

Chỉ có vấn đề với điều này là bạn sẽ nhận được 1048575 (Excel 2010) nếu không có dữ liệu sau B2, và nó bỏ qua hàng đầu tiên. –

+2

@DanielCook -> không có vấn đề với mã này vì nó giải quyết câu hỏi của người dùng. Chắc chắn có những cảnh báo với việc sử dụng '.End', nhưng kể từ khi người dùng cung cấp mã, tôi phải thừa nhận anh ta biết anh ta đang làm gì với nó. Nói cách khác '.End (xlDown)', có thể hoàn toàn hợp lệ nếu bây giờ bạn là tập dữ liệu bạn đang làm việc. –

+1

+1 đã bỏ qua câu trả lời của bạn đã được tham chiếu đầy đủ 'Sheet1' - bạn đã chỉnh sửa bài đăng đầu tiên chưa? – brettdj

2

Hai điều

  1. Khi làm việc ra khỏi trang tính, bạn cần phải hoàn toàn đủ điều kiện phạm vi của bạn
  2. Luôn đo đáy ô cuối cùng lên chứ không phải từ trên xuống - bạn có thể có những khoảng trống

đang

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 

mạnh mẽ hơn

Để xử lý mọi tình huống sạch sau đó Find là dễ dàng hơn

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

Không biết nếu điều này sẽ giúp nhưng tôi sử dụng này trong module của tôi tất cả các thời gian:

Dim TR as long, TC as long 

TR = [Sheet1!A1].CurrentRegion.Rows.count 
TC = [Sheet1!A1].CurrentRegion.Columns.count 

Nếu tôi biết rằng nếu tập dữ liệu mà tôi đang xử lý không có hàng hoặc cột trống, giống như trích xuất từ ​​một chương trình khác hoặc một thứ gì đó, thì nó nhanh và hoạt động tốt! Từ đây tôi có thể chỉ định một phạm vi lựa chọn hoặc thực hiện một vlookup.

TR = [Sheet1!A1].CurrentRegion.Rows.count 
[I2] = "=vlookup($C2,'sheet1'!A$2:B$" & TR & ",2,FALSE)"