2012-03-19 5 views
5

रिफार्टर संपत्ति के लिए वीबीए सहायता में, वे सभी नामों को एक डब्लूकेबी में सूचीबद्ध करने का उदाहरण देते हैं (बाहर निकलते हैं ताकि आप इसे चला सकें जैसा है)डब्लूबीके में हटाए गए नाम अभी भी मौजूद हैं और उन स्थानों को संदर्भित करें जो मौजूद नहीं हैं, धीमे एक्सेल

Sub showNames()'from VBA Help for "RefersTo" 
    Dim newSheet As Worksheet 
    Set newSheet = Worksheets.Add 
    Dim i As Long, nm As Name 
    i = 1 
    For Each nm In ActiveWorkbook.Names 
    newSheet.Cells(i, 1).Value = nm.Name 
    newSheet.Cells(i, 2).Value = "'" & nm.RefersTo 
    i = i + 1 
    Next 
    newSheet.Columns("A:B").AutoFit 
End Sub 

जब मैं इसे अपने वर्तमान प्रोजेक्ट पर चलाता हूं, तो यह कई नाम बदल जाता है जो मैंने सोचा था कि लंबे समय तक चले गए थे। लेकिन यहां वे अभी भी आसपास लटक रहे हैं और उन जगहों का जिक्र कर रहे हैं जो अब मौजूद नहीं हैं। मुझे लगता है कि यह मेरी प्रणाली को धीमा कर रहा है और मुझे उन नामों से छुटकारा पाना अच्छा लगेगा, लेकिन वे परिभाषित नाम विंडो में दिखाई नहीं देते हैं, इसलिए मैं उन्हें कहां पा सकता हूं?

संपादित करें: यह उल्लेख करने के लिए कि लिंक आइटम इस डब्लूबीके के लिए तैयार है।

+0

यह एक लंबे, गोल चक्कर (और संभवतः बदसूरत) समाधान है, लेकिन क्या आपने अपने सभी डेटा को एक नई कार्यपुस्तिका में माइग्रेट करने का प्रयास किया है? अगर wkb किसी भी तरह भ्रष्ट है, तो यह संभवतः इसे ठीक करेगा। – Gaffi

उत्तर

1

- अपडेट किया गया उत्तर -

तुम्हें पता है के बाद से अमान्य श्रेणियों के नाम लेकिन उन्हें नाम प्रबंधक में नहीं देख सकते हैं, आप उन्हें VBA तत्काल विंडो से मैन्युअल रूप से हटाने की कोशिश कर सकते हैं। नाम आप GrPix!patternListRange दिया एक वर्कशीट नाम इंगित करता है ताकि आप तत्काल खिड़की


मूल उत्तर में

ActiveWorkbook.Names("GrPix!patternListRange").Delete 

या

Sheets("GrPix").Names("patternListRange").Delete 

टाइप करके उसे हटाने के लिए सक्षम होना चाहिए

क्या आपके पास है आपने कोड के माध्यम से अमान्य नाम हटाने की कोशिश की? अर्थात

For Each nm In ActiveWorkbook.Names 
    If InStr(nm.RefersTo, "OldFileName.xls") > 0 Then 
     nm.Delete 
    End If 
Next nm 
+0

लड़के थे, मुझे वास्तव में इस समाधान के लिए उच्च उम्मीद थी। ऐसा लगता है जैसे कि इसे काम करना चाहिए, लेकिन नहीं, इसे किसी भी समस्या के नाम नहीं मिल रहे हैं। – Roy

+0

@ रॉय, लेकिन शोनाम अभी भी उन्हें ढूंढ रहे हैं? – mischab1

+0

हां, उनमें से 4 हैं, सभी कानूनी नाम हैं, और उनके सभी के साथ संदर्भ पीसी और मैक के बीच आगे और पीछे संदर्भ में उपरोक्त समान पैटर्न। पीएसएफ समांतर साझा फ़ोल्डर के लिए खड़ा है। – Roy

6

Update

विकल्प 1
एक manual method R1C1 का उपयोग कर भ्रष्ट नामों को हटाने के लिए (मैं JKP एक और मंच वह ऐसा करने के लिए कोड था पर बताते हुए याद कर सकते हैं, लेकिन वह इसे मुफ्त में प्रदान करने के लिए तैयार नहीं था)

  1. उपकरण, विकल्प का चयन करें और सामान्य टैब पर क्लिक करें।
  2. "आर 1 सी 1 संदर्भ शैली" के बगल में स्थित चेक बॉक्स पर क्लिक करें, ताकि आप वर्तमान सेटिंग बदल सकें।
  3. ठीक दबाएं।
  4. एक्सेल आपको किसी भी नाम का नाम बदलने के लिए प्रेरित करेगा (सभी खुली कार्यपुस्तिकाओं में!) जिसमें अवैध वर्ण हैं।
  5. नए नामित नामों को हटाने के लिए सम्मिलित करें, नाम, परिभाषित करें का चयन करें।
  6. R1C1 संदर्भ शैली को टूल, विकल्प, सामान्य का उपयोग करने के तरीके को वापस सेट करें।

विकल्प 2
क्रिस Neilsen Any chance to delete programatically corrupt ranged names (with spaces) in Excel (2007/2010)

पर इस पोस्ट लेकिन, यहाँ एक संभावित विकल्प है: एक .xlsm आप एक संवाद अवैध नामों के बारे में शिकायत मिलना चाहिए के रूप में अपनी कार्यपुस्तिका SaveAs, साथ एक विकल्प नाम बदलने के लिए और सभी के लिए ठीक है। एक बार सहेजे जाने के बाद, फ़ाइल को बंद करें और दोबारा खोलें, एक के रूप में सहेजें।xls और आप अच्छा होना चाहिए जाने के लिए

Initial Post
डाउनलोड Name Manager जो जनवरी कैरेल Pieterse और चार्ल्स विलियम्स द्वारा ऐड प्रबंध नाम

के लिए बाहर खड़े है

यह नाम संभाल लेंगे कि

  • अब श्रेणियों को हटा दिया गया है (आपकी समस्या),
  • अन्य कार्यपुस्तिकाओं से लिंक,
  • अब भ्रष्ट हैं

साथ ही यह स्थानीय पत्रक के नाम करने के लिए वैश्विक नाम परिवर्तित कर देंगे, और इसके विपरीत और इतने पर

enter image description here

+0

धन्यवाद ब्रेट्डज, मैंने कई वर्षों तक नाम प्रबंधक का उपयोग किया है और मेरे कोड को पुराने नामों से साफ रखने के लिए इस पर निर्भर करता है, लेकिन इस बार यह काम नहीं करता है। मुझे लगता है कि wkb दूषित हो सकता है, और नाम प्रबंधक वास्तव में इसे संभालने के लिए बनाया नहीं गया है। फर्जी नामों में से एक के लिए RefersTo का नमूना यहां दिया गया है: = '\\। Psf \ मैकएचडी \ दस्तावेज़ों और सेटिंग्स \ सभी उपयोगकर्ताओं \ दस्तावेज़ \ ग्रिडर पर सभी उपयोगकर्ता दस्तावेज़ों पर साझा \ \ NewGridder142.xls] लैंडमार्क'! $ पी $ 2 0 0 \\। psf \ सभी उपयोगकर्ता दस्तावेज़ों पर मैकएचडी \ दस्तावेज़ों और सेटिंग्स \ सभी उपयोगकर्ता \ दस्तावेज़ \ ग्रिडर पर साझा किया गया \ \ NewGridder142.xls] – Roy

+0

यही कारण है कि मैं कह रहा था कि ये नाम कहां संग्रहीत हैं, इसलिए मैं जा सकता हूं और उन्हें रूट कर सकता हूं मैन्युअल रूप से, शायद एक्सेल के बाहर।अगर मैं उन्हें पा सकता हूं। नाम प्रबंधक पर रेको के लिए – Roy

+0

+1। मैं पूरी तरह सहमत हूँ। अद्भुत कार्यक्रम, और इस विषय पर खोज रहे अधिकांश लोग इसे अपनी समस्या हल करेंगे। बस मेरा नहीं :( – Roy

1

यहाँ दो और समाधान है कि इस विषय पर खोज कर दूसरों के लिए काम कर सकते हैं हैं, लेकिन इन अभी भी अपने स्वयं के विशेष वर्कबुक को ठीक नहीं है।

मैं अभी भी देख रहा हूं।

यह हारून रक्त से है और पता चलता R1C1 विधि brettdj ने उल्लेख किया:

Sub RemoveDemonLinks() 
    Dim wbBook As Workbook 
    Dim nName As Name 
    Dim i  As Long 

    Set wbBook = ActiveWorkbook 

    i = 0 
    If wbBook.Names.Count > 0 Then 
     With Application 
     .ReferenceStyle = xlR1C1 
     .ReferenceStyle = xlA1 
     End With 

    For Each nName In wbBook.Name 
     If InStr(nName.RefersTo, "#REF!") > 0 Then nName.Delete 
     i = i + 1 
    Next nName 

    If i > 0 Then MsgBox i & " corrupted names was deleted from " & wbBook.Name 
    End If 
End Sub 

यह वह जगह है से एमएस सहायता

' Module to remove all hidden names on active workbook 
    Sub Remove_Hidden_Names() 

    ' Dimension variables. 
    Dim xName As Variant 
    Dim Result As Variant 
    Dim Vis As Variant 

    ' Loop once for each name in the workbook. 
    For Each xName In ActiveWorkbook.Names 

     'If a name is not visible (it is hidden)... 
     If xName.Visible = True Then 
      Vis = "Visible" 
     Else 
      Vis = "Hidden" 
     End If 

     ' ...ask whether or not to delete the name. 
     Result = MsgBox(prompt:="Delete " & Vis & " Name " & _ 
      Chr(10) & xName.Name & "?" & Chr(10) & _ 
      "Which refers to: " & Chr(10) & xName.RefersTo, _ 
      Buttons:=vbYesNo) 

     ' If the result is true, then delete the name. 
     If Result = vbYes Then xName.Delete 

     ' Loop to the next name. 
    Next xName 
End Sub 
+0

'Remove_Hidden_Names' कोड कैसे काम नहीं किया? क्या यह उन नामों के साथ एक संदेश बॉक्स कभी प्रदर्शित नहीं करता है जिन्हें हटाने की आवश्यकता है? क्या डिलीट प्रक्रिया विफल हुई? क्या यह त्रुटि के बिना चला गया लेकिन नाम हटाए नहीं गए थे? – mischab1

+0

यह बिना किसी त्रुटि के भाग गया और कोई छिपा नाम नहीं मिला। मुझे लगता है कि मेरे 4 नाम बहुत छिपे हुए हैं। यहां एक और उदाहरण (संख्या 1 ऊपर है) एक नाम का है और इसका संदर्भ है कि इसमें मौजूद नहीं होना चाहिए। नाम: GrPix! PatternListRange को संदर्भित करता है: = '\\। Psf \ मैकएचडी \ दस्तावेज़ों और सेटिंग्स \ सभी उपयोगकर्ताओं के दस्तावेज़ \ ग्रिडर सभी उपयोगकर्ता दस्तावेज़ों पर साझा \ \ NewGridder142.xls] लैंडमार्क'! $ Z $ 2 0 0 \\। पीएसएफ \ मैकएचडी \ दस्तावेज़ों और सेटिंग्स \ सभी उपयोगकर्ताओं के दस्तावेज़ \ ग्रिडर सभी उपयोगकर्ता दस्तावेज़ों पर साझा \ \ NewGridder142.xls] – Roy

+0

और 'ActiveWorkbook.Names ("GrPix! patternListRange" टाइप करना)। हटाएं' या 'शीट्स ("GrPix") नाम ("patternListRange")। तत्काल विंडो में हटाएं 'काम नहीं करेगा? इसका कोई मतलब नही बनता। लूप के लिए दो प्रक्रियाओं के बीच एकमात्र अंतर यह है कि कोई एक संस्करण का उपयोग करता है और दूसरा नाम ऑब्जेक्ट वैरिएबल का उपयोग करता है। इससे कोई फर्क नहीं पड़ता है। मुझे दूसरा कहना है कि दूसरे क्या कह रहे हैं। मुझे नहीं लगता कि मैं वास्तविक फ़ाइल को देखे बिना और मदद कर सकता हूं। – mischab1

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