2012-03-29 4 views
6

मैंने एक छोटी परियोजना की है, जिसमें 5 एक्सेल शीट शामिल है, कोड ठीक काम कर रहा है और मुझे सटीक परिणाम भी मिल रहा है, लेकिन अगर मैं शीट 1 से दूसरे नाम पर चादरों का नाम बदलता हूं। रेंज त्रुटि से सब्सक्राइब प्राप्त कर रहा हूँ।रेंज का नाम बदलने के बाद श्रेणी में सदस्यता

इसका कारण क्या है और इसे दूर करने के लिए क्या करने की आवश्यकता है। कृपया मदद करे।

नीचे कोड

Public Sub amount_final() 

Dim Row1Crnt As Long 
Dim Row2Crnt As Long 


With Sheets("sheet4") 
Row1Last = .Cells(Rows.Count, "B").End(xlUp).Row 
End With 

Row1Crnt = 2 
With Sheets("sheet3") 
Row2Last = .Cells(Rows.Count, "B").End(xlUp).Row 
End With 
+0

अपने कोड पोस्ट करें साथ ही –

+0

अपने कोड यहाँ स्नैपशॉट साथ – playercharlie

उत्तर

11

कोड से प्रति के साथ गलत कुछ भी नहीं है है। आपको Subscript out of range त्रुटि मिलेगी यदि एक्सेल एक विशेष शीट नहीं ढूंढ पा रहा है जो कि आपने इसका नाम बदलकर काफी स्पष्ट है। उदाहरण के लिए, यदि आप अपनी शीट "शीट 3" का नाम "शीटएक्सवाईड" में बदलते हैं तो एक्सेल इसे ढूंढने में सक्षम नहीं होगा।

इन प्रकार की त्रुटियों से बचने का एकमात्र तरीका चादरों के CODENAME का उपयोग करना है। देखें स्नैपशॉट

enter image description here

यहाँ

हमारे पास एक चादर जो

तो यह कोड

Sheets("Sample Name before Renaming").Range("A1").Value = "Blah Blah" 

एक ही कोड

के रूप में लिखा जा सकता है पर विचार "का नाम बदल रहा से पहले नमूना नाम" एक नाम है
Sheet2.Range("A1").Value = "Blah Blah" 

अब कोई फर्क नहीं पड़ता कि आप कितनी बार नाम बदलते हैं चादर ई, ऊपर कोड हमेशा :)

HTH

सिड

+0

+1 अच्छा स्पष्टीकरण पेस्ट करें :) –

+0

धन्यवाद सिद्धार्थ, अच्छी और सरल व्याख्या। – neobee

+0

+1 अच्छी तरह से ढंका सिड – brettdj

1

काम करेंगे बुनियादी मुद्दा यह है कि आप अपने वास्तविक नाम उनके कोडनाम का उपयोग करने और नहीं चादरों की बात कर रहे है। जब भी आप शीट्स ("शीट 4") का संदर्भ लेते हैं, तो आप एक्सेल में उस नाम वाले शीट पर निर्भर हैं। कोडनाम नाम Visual Basic में असाइन किए गए नाम हैं, इसलिए अंतिम उपयोगकर्ता किसी डेवलपर के रूप में उनके साथ बातचीत नहीं करता है, आप किसी भी समय

कोड नामों का उपयोग इस Excel help video में लगभग 9:40 बजे कवर किया गया है। आप देखेंगे कि वे Excel नामों से टाइप करने के लिए तेज़ हैं क्योंकि 'शीट्स()' क्वालीफायर

मुझे आपके कोड नमूने में शीट्स ("शीट 1") नहीं दिखाई दे रहा था लेकिन आप कोडनाम पर स्विच कर सकते हैं उदाहरण के सभी उदाहरणों को ढूंढकर/प्रतिस्थापित करके सभी चादरें बहुत जल्दी 'शीट ("Sheet2")।' 'शीट 2' के साथ।

0

प्रत्येक शीट को उनके कोड नामों के बजाय संदर्भित करें। वे डिफ़ॉल्ट रूप से शीट 1, शीट 2 आदि पर सेट हैं, लेकिन यदि आप चाहें तो प्रत्येक शीट के लिए आप प्रॉपर्टी विंडो में उनका नाम बदल सकते हैं। इस तरह आप अपने कोड को नीचे की तरह लिख सकते हैं, भले ही आप चादरों का नाम दें।

With Sheet1 
Row1Last = .Cells(Rows.Count, "B").End(xlUp).Row 
End With 

Row1Crnt = 2 
With Sheet2 
Row2Last = .Cells(Rows.Count, "B").End(xlUp).Row 
End With 

etc... 
0

मैं इस समस्या से जूझने के अपने अनुभव को साझा करना चाहता था।

Dim DailyWSNameNew As String 
lastrow = Sheets("DailyWSNameNew").Range("A65536").End(xlUp).Row + 1 -- This is wrong as I included a placeholder worksheet name in quotes 

सुधार::

lastrow = Sheets(DailyWSNameNew).Range("A65536").End(xlUp).Row + 1 

यह इसे हल यहाँ गलती मैंने इसके लिए हामी है।

0

मुझे आज इस त्रुटि का सामना करना पड़ा लेकिन ऊपर दिए गए किसी भी समाधान का उपयोग नहीं कर सका, हालांकि मैंने अंततः इसे हल करने में कामयाब रहा।

मेरी स्थिति यह थी कि मेरे पास कॉलम ए में निहित एक सूची थी। प्रत्येक सेल के लिए एक वैल्यू के साथ मैंने वैरिएबल में वैल्यू संग्रहीत किया, एक नई शीट बनाई और वैरिएबल में संग्रहीत मूल्य के अनुसार चादर का नाम दिया।

थोड़ी देर बाद कोड में मैं कोड का उपयोग करके बनाए गए नए पत्रक का चयन करने की कोशिश की:

Sheets(ValueVariable).Select 

मैं त्रुटि "सीमा से बाहर सबस्क्रिप्ट" का सामना करना पड़ा है और मैं क्यों समझ नहीं सकता है। मैंने सफलता से पहले समान कोड का उपयोग किया है। मैंने चर को एक स्ट्रिंग के रूप में कास्टिंग करके हल किया था। चर के रूप में चर को घोषित करना मेरे लिए काम नहीं कर रहा था।

तो, अगर किसी और इस त्रुटि मुठभेड़ और प्रयास करने के लिए कुछ चाहते हैं, शायद यह आपके लिए काम करेंगे:

Sheets(Cstr(ValueVariable)).Select