2012-10-26 12 views
6

में पंक्तियों की संख्या की संख्या मैं शीट 2 कोड मॉड्यूल से शीट 1 में पंक्तियों की संख्या गिनना चाहता हूं।वर्कशीट

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

धन्यवाद स्कॉट होल्ट्ज़मैन मैंने आपके कोड की कोशिश की है और यह काम करता है। एक बार फिर धन्यवाद। और हर कोई जिसने टिप्पणी की है। –

+0

शायद आपको सौदा करने के लिए सौदा किया गया है, राख! लेकिन एसओ में आपका स्वागत है। इतनी जल्दी सीखने में सक्षम होना बहुत अच्छा है। नीचे दिए गए सभी उत्तरों को देखते हुए, जो भी आपको अपनी जरूरतों के अनुरूप सबसे अच्छा लगता है, कृपया इसे रिक्त चेक मार्क पर क्लिक करके स्वीकृत के रूप में चिह्नित करें। यह भविष्य में दूसरों को यह जानने में मदद करता है कि आपको किसने सबसे अच्छी मदद की। –

उत्तर

2

उदाहरण के लिए आप इस का उपयोग कर सकते हैं:

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

यह पर्वतमाला के बिना काम करता है। यदि आप वर्तमान शीट को बदलने और इसकी पंक्तियों की गिनती की जांच करने की आवश्यकता होगी, तो आप चेक करने के लिए ActiveSheet का उपयोग कर सकते हैं।

+1

यह प्रश्न का उत्तर नहीं देता है - कॉलम बी – brettdj

+2

में अंतिम उपयोग किए गए सेल में बी 2 के लिए विशेष है, आप इसका उपयोग कर सकते हैं, लेकिन यदि 'रेंज ("बी 2") के बीच रिक्त कक्ष हैं। अंत (xlDown) 'और 'UsedRange' में अंतिम सेल आप जिस पंक्ति गणना की अपेक्षा करते हैं उसे वापस नहीं करेंगे! –

+0

नहीं, सवाल यह है कि "मैं शीट 1 पर पंक्तियों की संख्या गिनना चाहता हूं", और यह एक उत्तर है (वैकल्पिक जवाब, पंक्तियों की जांच करने के लिए अपनी विधि का उपयोग नहीं कर रहा है)। और स्कॉट के लिए, यह चादरों के डेटा पर निर्भर करता है, और ओपी के पास जो भी इरादा है। मैंने "पंक्तियों की संख्या" अवधि देखी है, मैं इसे उत्तर के रूप में देता हूं। – Vesper

9

त्रुटि recct में दूसरी श्रेणी संदर्भ में होती है। चूंकि आप एक अलग चादर का संदर्भ दे रहे हैं, इसलिए आपको दोनों श्रेणी संदर्भों में शीट नाम को वीबीए बताना होगा।

ऐसा करें:

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

वैकल्पिक रूप से, यह (हालांकि थोड़ा sloppier) के रूप में अच्छी तरह से काम करेगा।

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

अद्यतन

के बाद से वहाँ क्या आप वास्तव में चादर पर पंक्तियों की संख्या से मतलब है, इसके बाद के संस्करण कोड का उपयोग सचमुच बी 2 में शुरू और सन्निहित कोशिकाओं की संख्या गिनती करने के लिए चारों ओर चर्चा का एक बहुत कुछ है सीधे नीचे

हालांकि, अगर आप पिछले "असली" का इस्तेमाल किया स्तंभ बी में सेल लगाना चाहते हैं (वास्तविक से, मैं इसे में डेटा के साथ मतलब) ऐसा करते हैं:

With ThisWorkbook.Sheets("Sheet1") 

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

End With 
+1

बी 2 के बाद कोई डेटा नहीं है, तो यह केवल समस्या है कि आपको 1048575 (एक्सेल 2010) मिलेगा, और यह पहली पंक्ति को अनदेखा करता है। –

+2

@DanielCook -> इस कोड के साथ कोई समस्या नहीं है क्योंकि यह उपयोगकर्ताओं के प्रश्न हल करती है। निश्चित रूप से 'End' का उपयोग करने के साथ चेतावनी हैं, लेकिन चूंकि उपयोगकर्ता ने कोड प्रदान किया है, इसलिए मुझे लगता है कि वह जानता है कि वह इसके साथ क्या कर रहा है। दूसरे शब्दों में '.nd (xlDown)', यदि आप अब जिस डेटासेट के साथ काम कर रहे हैं, तो पूरी तरह मान्य हो सकता है। –

+1

+1 ने अनदेखा किया था कि आपका उत्तर 'शीट 1' का संदर्भ दे रहा था - क्या आपने अपनी प्रारंभिक पोस्ट संपादित की थी? – 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)" 
संबंधित मुद्दे