2012-03-19 6 views
5

W pomocy VBA dla właściwości RefersTo, podają ten przykład wyświetlania wszystkich nazw w Wkb (poprawione, dzięki czemu można go uruchomić jak jest)usunięte nazwy w Wbk nadal istnieją i odnoszą się do lokalizacji, które nie istnieją, powolne Excel

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 

Kiedy biegnę, że na mojego obecnego projektu, okazuje się wiele nazw, które według mnie były dawno minęły. Ale tutaj wciąż się kręcą i odnoszą się do miejsc, które już nie istnieją. Myślę, że to właśnie spowalnia mój system i chciałbym pozbyć się tych nazw, ale nie pojawiają się one w oknie Define Name, więc gdzie je znajdę?

edytuj: Warto wspomnieć, że element Links jest wyszarzony dla tego Wbk.

+0

To długie, rondo (ewentualnie brzydki) rozwiązanie, ale czy próbowałeś przenieść wszystkie swoje dane do nowego skoroszytu? Jeśli plik wkb jest uszkodzony, prawdopodobnie go naprawi. – Gaffi

Odpowiedz

1

- Aktualizacja Answer -

Skoro wiesz, że Nazwy niepoprawnych zakresów, ale nie można ich zobaczyć w Menedżerze nazw, można spróbować usunąć je ręcznie z natychmiastowego okna VBA. Nazwa daliście GrPix!patternListRange wskazuje nazwę arkusza, więc powinieneś być w stanie go usunąć, wpisując

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

lub

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

w oknie Immediate


Original Odpowiedź

Have you próbowałeś usunąć nieprawidłowe nazwy za pomocą kodu? tj

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

Chłopcze, naprawdę miałem duże nadzieje na to rozwiązanie. tak jak powinno działać, ale nie, nie może znaleźć żadnych nazw problemów – Roy

+0

@Roy, Ale ShowNames wciąż je znajduje? – mischab1

+0

Tak, jest ich 4, wszystkie imiona i nazwiska oraz ich odnośniki Do wszystkich b w taki sam sposób, jak powyżej, odnosząc się do komputera PC i Maca. Psf oznacza Parallels Shared Folder. – Roy

6

Update

opcja 1
A manual method usunąć uszkodzone nazwy używając R1C1 (pamiętam JKP stwierdzając na innym forum miał kod, aby to zrobić, ale nie był przygotowany, aby zapewnić go za darmo)

  1. Wybierz Narzędzia, Opcje i kliknij kartę Ogólne.
  2. Kliknij pole wyboru obok "Styl odniesienia R1C1", aby zmienić bieżące ustawienie.
  3. Naciśnij OK.
  4. Program Excel poprosi o zmianę nazwy dowolnej nazwy (we wszystkich otwartych skoroszytach!) Zawierającej niedozwolone znaki.
  5. Wybierz Wstaw, nazwę, zdefiniuj, aby usunąć nowo nazwane nazwy.
  6. Ustaw styl referencyjny R1C1 z powrotem tak jak lubisz za pomocą narzędzi, opcji, ogólnych.

opcja 2
Chris Nielsen pisał to w Any chance to delete programatically corrupt ranged names (with spaces) in Excel (2007/2010)

Ale tutaj jest to możliwe alternatywy: saveas skoroszytu jako .xlsm należy uzyskać okno narzekają nieprawidłowych nazw, z opcja do zmiany nazwy i przycisk OK na wszystkie. Po zapisaniu zamknij i ponownie otwórz plik , Zapisz jako.xls i powinno być dobrze iść

Initial Post
Pobierz Name Manager która jest wyróżniać dodatek Jan Karel Pieterse i Charlesa Williamsa do zarządzania nazwami

będą obsługiwać Nazwy, które

  • teraz błąd się skończył, ponieważ zakresy zostały usunięte (twój problem),
  • link do innych skoroszytów,
  • są teraz uszkodzony

Plus będzie konwertować globalnych nazw miejscowych nazw arkuszy i vice versa, a więc na

enter image description here

+0

Dzięki brettdj, używam Name Manager przez wiele lat i polegam na nim, aby mój kod został oczyszczony ze starych nazw, ale tym razem to nie zadziałało. Zaczynam myśleć, że wkb może być uszkodzony, a menedżer nazw nie jest tak zbudowany, aby sobie z tym poradzić. Oto przykład RefersTo dla jednego z fałszywych nazw: = '\\. Psf \ Shared on MacHD \ Documents and Settings \ All Users \ Documents \ Gridder on All Users Documents \ [NewGridder142.xls] Landmarks' $ P $ 2 0 0 \\. psf \ Shared on MacHD \ Documents and Settings \ Wszyscy użytkownicy \ Dokumenty \ Gridder na wszystkich dokumentach użytkowników \ ​​[NewGridder142.xls] – Roy

+0

Dlatego pytałem o to, gdzie te nazwy są przechowywane, więc mogę je wykorzenić ręcznie, może poza programem Excel.Gdybym mógł je znaleźć. – Roy

+0

+1 za recco w Menedżerze nazw. W pełni się zgadzam. Wspaniały program, a większość osób wyszukujących ten temat uzna, że ​​rozwiązał on ich problem. Po prostu nie moje :( – Roy

1

Oto dwa kolejne rozwiązania, które mogą pracować dla innych szukających na ten temat, ale to nadal nie naprawić własną szczególną skoroszytu.

Nadal szukam.

to Aaron krwi i pokazuje sposób R1C1 wymienić 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 

To z MS pomocy

' 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

Jak nie działa kod 'Remove_Hidden_Names'? Czy nigdy nie wyświetlało się okienko z nazwami, które należy usunąć? Czy proces usuwania się nie powiódł? Czy działał bez błędu, ale nazwy nie zostały usunięte? – mischab1

+0

To działało bezbłędnie i nie znalazło żadnych ukrytych nazw. Myślę, że moje 4 nazwiska są po prostu zbyt dobrze ukryte. Oto inny przykład (nr 1 powyżej) nazwy i Odwołuje się do tego, że nie powinno istnieć. Nazwa: GrPix! PatternListRange Odwołuje się do: = '\\. Psf \ Shared on MacHD \ Documents and Settings \ Wszyscy użytkownicy \ Documents \ Gridder on All Users Dokumenty \ [NewGridder142.xls] Landmarks' $ Z $ 2 0 0 \\. psf \ Shared on MacHD \ Documents and Settings \ All Users \ Documents \ Gridder on All Users Dokumenty \ [NewGridder142.xls] – Roy

+0

i wpisywanie 'ActiveWorkbook.Names (" GrPix! patternListRange ") .Usuń' lub' Arkusze ("GrPix") .Names ("patternListRange"). Delete? W oknie bezpośrednim nie działa? To nie ma sensu. Jedyną różnicą między dwiema procedurami "For Loop" jest to, że używa się Variant, a druga używa zmiennej obiektu Name. To nie powinno robić żadnej różnicy. Muszę oddać to, co mówią inni. Nie sądzę, żebym mógł dać więcej pomocy bez patrzenia na rzeczywisty plik. – mischab1

Powiązane problemy