2012-03-19 67 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

相关问题