एक्सेल 2013 और एक्सेल 2010 में कोड ठीक काम करता है - लेकिन एक्सेल 2016 में यह त्रुटि दिखाता है:

रन टाइम एरर 9 - सबस्क्रिप्ट सीमा से बाहर है

क्या आप मदद कर सकते हैं। कोड सिर्फ एक कॉलम टाइप करता है और उसे छुपाता है।

Sub abc()
    Sheets("Top_Issue").Visible = True
    Sheets("Top_Issue").Select
    lastrow = Cells(Rows.Count, "a").End(xlUp).Row
    Range(Cells(1, "p"), Cells(lastrow, "p")).Select
    ActiveWorkbook.Worksheets("Top_Issue").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Top_Issue").Sort.SortFields.Add Key:=Range("P1"), _
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Top_Issue").Sort
        .SetRange Range("A2:S" & lastrow)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Sheets("Top_Issue").Visible = False
End Sub
2
Shyam 27 जुलाई 2018, 16:57
1
मेरे पास एक्सेल 2016 है और वह कोड मेरे लिए सफलतापूर्वक चला। मैं इसे त्रुटि से बाहर निकालने में सक्षम नहीं था।
 – 
Hasib_Ibradzic
27 जुलाई 2018, 17:06
4
कोड की कौन सी पंक्ति त्रुटि लौटा रही है?
 – 
Olly
27 जुलाई 2018, 17:08
एक और जाँच करें कि यह Excel 2016 में चलता है। क्या आप सुनिश्चित हैं कि आपकी कार्यपुस्तिका में कुछ ईवेंट नहीं हैं, जो कोड चलाने के दौरान ट्रिगर हो सकते हैं? गलती वहीं हो सकती है।
 – 
Vityata
27 जुलाई 2018, 17:11
त्रुटि को फेंकने वाली विशिष्ट पंक्ति/निर्देश के शीर्ष पर, यह जानना भी उपयोगी होगा कि Top_Issue शीट ThisWorkbook (वह फ़ाइल जिसमें यह कोड है) में मौजूद है या नहीं।
 – 
Mathieu Guindon
27 जुलाई 2018, 17:34

2 जवाब

आपके पास यहां ActiveSheet के निहित संदर्भ हैं:

lastrow = Cells(Rows.Count, "a").End(xlUp).Row
Range(Cells(1, "p"), Cells(lastrow, "p")).Select

उपरोक्त अयोग्य Range सदस्य कॉल इसके बराबर हैं:

lastrow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "a").End(xlUp).Row
ActiveSheet.Range(ActiveSheet.Cells(1, "p"), ActiveSheet.Cells(lastrow, "p")).Select

कोड जो .Select/.Activate का उपयोग करता है और परोक्ष रूप से सक्रिय शीट को संदर्भित करता है, जब भी कोई धारणा टूटती है, तो अंततः उसके फटने की बहुत संभावना है, उदाहरण के लिए जब ActiveWorkbook कार्यपुस्तिका कोड नहीं है मान रहा है।

आप उस Top_Issue शीट के लिए ऑब्जेक्ट संदर्भ को 6 बार खींच रहे हैं; कभी ActiveWorkbook से, कभी Sheets संग्रह का उपयोग करते हुए, दूसरी बार Worksheets संग्रह का उपयोग करते हुए, बीच में .Select कॉल के साथ।

With ब्लॉक से शुरू करें, और सुनिश्चित करें कि सभी Range और Worksheet सदस्य कॉल उचित रूप से योग्य हैं:

With ActiveWorkbook.Worksheets("Top_Issue")
    .Visible = True
    .Select
    lastrow = .Cells(.Rows.Count, "a").End(xlUp).Row
    .Range(.Cells(1, "p"), .Cells(lastrow, "p")).Select
    .Sort.SortFields.Clear
    .Sort.SortFields.Add Key:=.Range("P1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With .Sort
        .SetRange .Range("A2:S" & lastrow)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    .Visible = False
End With

यदि Top_Issue शीट संकलन-समय पर ThisWorkbook में मौजूद है, तो इसकी (Name) संपत्ति (गुणों टूलविंडो F4 में) को इस पर सेट करें , उदाहरण के लिए TopIssueSheet, और Worksheets संग्रह से खींचने के बजाय उस पहचानकर्ता का उपयोग करें।

ध्यान दें कि ActiveWorkbook (वर्तमान में सक्रिय पुस्तक) ThisWorkbook (वह पुस्तक जिसमें यह कोड है) हो भी सकता है और नहीं भी हो सकता है - यदि गलत पुस्तक सक्रिय है, और यह नहीं है एक Top_Issue शीट है, इसलिए आपको रन-टाइम त्रुटि 9 मिल रही है।

कार्यपत्रक के लिए कोड नाम का उपयोग करते हुए, अब आपको इस बात की परवाह करने की आवश्यकता नहीं है कि कौन सी कार्यपुस्तिका सक्रिय हो सकती है:

With TopIssueSheet
    ...
End With

जब आप किसी ऐसी कार्यपुस्तिका पर काम कर रहे हों जो ThisWorkbook नहीं है, तो आपको कभी भी किसी कार्यपुस्तिका के Worksheets संग्रह से कार्यपत्रक निकालने की आवश्यकता होगी।

2
Mathieu Guindon 27 जुलाई 2018, 18:04
@ मैट - यह उपरोक्त कोड के लिए रन टाइम त्रुटि '438' दे रहा है - .SortFields.Add Key:=.Range("P1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal < कोड>
 – 
Shyam
27 जुलाई 2018, 18:00
गाह, ऐसा इसलिए है क्योंकि With ब्लॉक .Sort के दायरे में है; .Range सदस्य नहीं है। स्थिर।
 – 
Mathieu Guindon
27 जुलाई 2018, 18:04
साथ ही, देखें कि क्या उस .Select कॉल को हटाने से कुछ भी बदल जाता है।
 – 
Mathieu Guindon
27 जुलाई 2018, 18:05

वर्कशीट नाम के बजाय शीट कोड का उपयोग करने का प्रयास करें। Sheet1, वगैरह...

साथ ही, ध्यान दें कि पत्रक संग्रह और कार्यपत्रक संग्रह दो अलग-अलग चीज़ें हैं।

1
Mihai Adrian 27 जुलाई 2018, 17:06
1
यह अच्छी और अच्छी सलाह है (Worksheet को पुनः प्राप्त करने के लिए शीट कोडनेम और Worksheets संग्रह का उपयोग करें), लेकिन प्रश्न का उत्तर नहीं देता है (मेरा डाउनवोट नहीं)।
 – 
Mathieu Guindon
27 जुलाई 2018, 17:20
वास्तव में.. कोडनामों को Sheets/Worksheets से खींचने के बजाय उपयोग करने से ओपी की समस्या बहुत अच्छी तरह से ठीक हो सकती है।
 – 
Mathieu Guindon
27 जुलाई 2018, 17:24
निहित ActiveSheet संदर्भों के लिए भी देखें। Cells और Range सदस्य कॉल जो योग्य नहीं हैं, परोक्ष रूप से संदर्भित करते हैं कि जो भी शीट सक्रिय है। लेकिन आपको ज़्यादातर हमें यह बताना होगा कि कौन सी विशिष्ट पंक्ति त्रुटि उत्पन्न कर रही है।
 – 
Mathieu Guindon
27 जुलाई 2018, 17:33
क्षमा करें दोस्तों .. लंबे समय से दूर हैं .. ऐसा लगता है कि केवल उस प्रणाली में हमारे पास समस्याएं हैं .. मैंने 2016, 2013 और 2010 में अलग-अलग पीसी में कोड का परीक्षण किया है - इसकी कामकाजी फाइल .. लेकिन किसी कारण से यह चालू नहीं होता है वह पीसी। हालांकि कोई भ्रष्टाचार दिखाई नहीं दे रहा था - संदर्भों की भी जांच की .. यदि कोई है तो लापता बिट के लिए - तो जांच के लिए उस पर पुनः स्थापित करने का प्रयास करेंगे .. आपके सभी समर्थन के लिए धन्यवाद - मैं इस प्रश्न को बंद करना चाहता हूं - मेरी तरफ से कोशिश करूंगा .. आप लोग बहुत अच्छे हैं.. इस साइट से प्यार है।
 – 
Shyam
1 अगस्त 2018, 15:45