2011-12-28 14 views
10

पर स्कॉप्ड किया गया है, तो मैं यह सोचने का प्रयास कर रहा हूं कि एक नामित श्रेणी किसी कार्यपुस्तिका या विशिष्ट शीट पर स्कॉप्ड की गई है या नहीं।प्रोगामैटिक रूप से निर्धारित करता है कि नामित रेंज को कार्यपुस्तिका


एक परीक्षण के रूप में, मैंने एक नया एक्सेल दस्तावेज़ बनाया है और 6 नामित श्रेणियों में जोड़ा है। ,

For i = 1 To ThisWorkbook.Names.Count 
    If ThisWorkbook.Names(i).WorkbookParameter Then Debug.Print ThisWorkbook.Names(i).Name 
Next i 

तीन Workbook scoped नामित श्रेणियों में परिणाम होगा लॉग इन करने की:

Name   | Refers To   | Scope 
-------------+----------------------+----------- 
rng_Local01 | =Sheet1!$A$2:$A$16 | Sheet1 
rng_Local02 | =Sheet1!$C$2:$C$16 | Sheet1 
rng_Local03 | =Sheet1!$E$2:$E$16 | Sheet1 
rng_Global01 | =Sheet1!$B$2:$B$16 | Workbook 
rng_Global02 | =Sheet1!$D$2:$D$16 | Workbook 
rng_Global03 | =Sheet1!$F$2:$F$16 | Workbook 

मुझे लगता है कि चल रहा है उम्मीद करेंगे: यहाँ कैसे वे नेम मैनेजर में बाहर रखी रहे हैं हालांकि, कुछ भी नहीं होता है। कोई त्रुटि नहीं है .Names(i).WorkbookParameterFalse पर पर नामित श्रेणियों के सभी पर मूल्यांकन करता है और मुझे यकीन नहीं है कि क्यों।


, VBA मदद मैं ValidWorkbookParameter जो WorkbookParameter की ReadOnly चचेरे भाई की तरह दिखता है भर में आया था में Name वस्तु के माध्यम से देख रहे हैं फिर भी है कि विधि का उपयोग कर कोई फर्क नहीं है।

मैं भी स्पष्ट रूप से ThisWorkbook.Names(i).WorkbookParameter = True स्थापित करने की कोशिश की है, लेकिन यह एक त्रुटि में परिणाम है:

"Invalid procedure call or argument"

तथ्य यह है कि WorkbookParameter जा रहा है रूप में सूचीबद्ध है के बावजूद पढ़ें/लिखें


किसी को भी बहा कर सकते हैं कोई प्रकाश नहीं है कि यह क्यों काम नहीं कर रहा है क्योंकि मैं भी इसकी उम्मीद कर रहा हूं? क्या मुझे गलत समझा गया है कि कैसे Name.WorkbookParameter काम करना चाहिए? क्या कोई इसे सफलतापूर्वक चलाने में सक्षम बनाता है?

+0

बहुत उपयोगी समाधान लोगों के लिए धन्यवाद ... मैं अभी भी 'वर्कबुक पैरामीटर' के व्यवहार और वीबीए में 'नाम' ऑब्जेक्ट के 'वैध वर्कबुक पैरामीटर' गुणों के प्रति उत्सुक हूं। मेरे दिमाग में, वे गुण * काम नहीं कर रहे हैं * विज्ञापन के रूप में। –

+0

यह सुनिश्चित नहीं है कि वर्कबुक पैरामीटर क्या है लेकिन शेयरपॉइंट में एक्सेल सेवाओं के लिए संदेह है, क्लाइंट एक्सेल –

उत्तर

19

आप अभिभावक संपत्ति का उपयोग कर सकते हैं:

Sub Global_Local_names() 
    Dim oNm As Name 
    For Each oNm In Names 
     If TypeOf oNm.Parent Is Worksheet Then 
      Debug.Print oNm.Name & " is local to " & oNm.Parent.Name 
     Else 
      Debug.Print oNm.Name & " is global to " & oNm.Parent.Name 
     End If 
    Next 
End Sub 
+0

नाइस के लिए नहीं। टिप – JMax

+0

के लिए धन्यवाद समाधान के लिए धन्यवाद ... मैंने 'मूल' संपत्ति का उपयोग करने के बारे में सोचा नहीं था।मैंने इसे उत्तर के रूप में चिह्नित किया क्योंकि यह सबसे सीधे सीधे इस बात से संबंधित है कि नामित श्रेणी कार्यपुस्तिका या शीट से संबंधित है या नहीं। –

3

मैं WorkbookParameter काम करने के लिए प्रबंधन नहीं किया, लेकिन मैं एक समाधान मिला:

For i = 1 To ThisWorkbook.Names.Count 
    If UBound(Split(ThisWorkbook.Names(i).Name, "!")) > 0 Then Debug.Print ThisWorkbook.Names(i).Name 
Next i 

स्थानीय नामांकित श्रेणी का नाम (यानी केवल एक शीट के लिए गुंजाइश) इस प्रकार स्वरूपित है: Sheet1!NamedRange जबकि वैश्विक नाम का नाम स्वरूपित है: NamedRange

इस प्रकार, आप ! पर विभाजित कर सकते हैं और सरणी की लंबाई जांच सकते हैं।

+0

मुझे 'स्प्लिट' का उपयोग करके रचनात्मक समाधान पसंद है –

संबंधित मुद्दे