2012-03-19 69 views
5

在VBA幫助RefersTo屬性中,他們給出了此示例列出了Wkb中的所有名稱(充實以便您可以運行它如)在Wbk中刪除的名稱仍然存在,並且指的是不存在的位置,緩慢的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 

當我運行在我當前的項目,它變成了我認爲是長了許多名字。但在這裏他們仍然在四處閒逛,指的是不再存在的地方。我認爲這是減慢我的系統,我很想擺脫這些名稱,但他們不顯示在定義名稱窗口,所以我在哪裏可以找到它們?

編輯:意思是說這個Wbk的鏈接項目是灰色的。

+0

這是一個長期的,迂迴(以及可能難看)溶液,但您是否嘗試將所有數據遷移到新的工作簿?如果wkb以某種方式損壞,這可能會修復它。 – Gaffi 2012-03-19 14:53:51

回答

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 2012-03-20 04:13:05

+0

@Roy,但ShowNames仍然可以找到它們嗎? – mischab1 2012-03-20 20:02:22

+0

是的,它們中有4個,所有合法名稱,以及它們的指向所有b在PC和Mac之間來回傳遞時,與上述基本相同。 PSF代表Parallels共享文件夾。 – Roy 2012-03-20 22:18:18

6

Update

選項1
一個manual method刪除使用R1C1腐敗的名字(我記得JKP說明另一個論壇上他的代碼來做到這一點,但他不準備爲免費提供的話)

  1. 選擇工具,選項,然後單擊常規選項卡。
  2. 單擊「R1C1參考樣式」旁邊的複選框,以更改當前設置。
  3. 按OK。
  4. Excel將提示您更改包含非法字符的任何名稱(在所有打開的工作簿中!)的名稱。
  5. 選擇插入,名稱,定義刪除新重命名的名稱。
  6. 使用工具,選項,常規,將R1C1引用樣式設置爲您喜歡的方式。

選項2
克里斯·尼爾森登載在Any chance to delete programatically corrupt ranged names (with spaces) in Excel (2007/2010)

但是,這裏有一個可能的選擇:另存爲您的工作簿作爲.XLSM 你應該得到一個對話框,抱怨無效的名稱,以及一個選項 重命名並確定全部按鈕。保存後,關閉並重新打開 文件,另存爲。XLS,你應該是好去

Initial Post
下載Name Manager這是由Jan卡雷爾Pieterse和查爾斯·威廉斯脫穎而出插件管理名

將處理的名稱是

  • 現在出錯,因爲範圍已被刪除(您的問題),
  • 鏈接到其他工作簿,
  • 現在腐敗

加上它會全局名稱轉換爲本地表名稱,反之亦然等

enter image description here

+0

感謝brettdj,我已經使用了多年的名稱管理器,並依靠它來保持我的代碼清理舊名稱,但這次它不起作用。我開始認爲wkb可能已損壞,並且名稱管理器並不是真正用於處理該問題的。下面是一個虛假名稱的RefersTo示例:='\\。psf \ Shared on MacHD \ Documents and Settings \ All Users \ Documents \ Gridder on All Users Documents \ [NewGridder142.xls] Landmarks'!$ P $ 2 0 0 \\。psf \ Shared在MacHD \ Documents and Settings \所有用戶\ Documents \ Gridder在所有用戶文檔\ [NewGridder142.xls] – Roy 2012-03-19 13:31:47

+0

這就是爲什麼我詢問這些名稱存儲在哪裏,所以我可以去根除它們手動,也許在Excel之外。如果我能找到它們。 – Roy 2012-03-19 13:36:32

+0

+1名稱經理上的recco。我完全同意。精彩的節目,大多數搜索這個主題的人會發現它解決了他們的問題。只是不是我的:( – Roy 2012-03-19 13:48:17

1

這裏有兩個更多的解決方案,可能對別人有關這個主題的搜索工作,但這些仍然沒有解決我自己的特殊工作簿。

我還在尋找。

這是從亞倫血液和示出了由brettdj提到的R1C1方法:

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 

這是從MS幫助

' 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 2012-03-21 21:18:19

+0

它沒有錯誤地運行,沒有找到任何隱藏的名稱。我猜我的4個名字太隱蔽了。這是另一個例子(第一個是上面的)名稱,並指出這不應該存在。名稱:GrPix!patternListRange指的是:='\\。psf \ Shared on MacHD \ Documents and Settings \ All Users \ Documents \ Gridder on All Users Documents \ [NewGridder142.xls] Landmarks'!$ Z $ 2 0 0 \\。 psd \ Shared on MacHD \ Documents and Settings \ All Users \ Documents \ Gridder on All Users Documents \ [NewGridder142.xls] – Roy 2012-03-22 01:39:28

+0

and typing'ActiveWorkbook.Names(「GrPix!patternListRange」)。Delete' or'Sheets(「GrPix」 ).Names(「patternListRange」)。在立即窗口中刪除'不起作用?這個不成立。兩個過程For循環之間唯一的區別是一個使用Variant,另一個使用Name對象變量。這應該沒有什麼區別。我不得不第二個別人在說什麼。如果不查看實際的文件,我不認爲我可以提供任何幫助。 – mischab1 2012-03-22 19:12:44

相關問題