Wbk中的已删除名称仍然存在,并引用不存在的位置,缓慢的Excel

在VBA帮助RefersTo财产,他们给这个例子列出所有名称在一个Wkb(充实,所以你可以运行它)

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 

当我在当前的项目上运行它时,会出现许多我以为很久没有看到的名称。 但是在这里,他们仍然在四处闲逛,指的是不再存在的地方。 我认为这是减慢我的系统,我很想摆脱这些名称,但他们不显示在定义名称窗口,所以我在哪里可以find他们?

编辑:意思是说,这个Wbk链接项是灰色的。

– 更新答案 –

由于您知道无效范围的名称,但无法在名称pipe理器中看到它们,您可以尝试从VBA立即窗口中手动删除它们。 你给GrPix!patternListRange的名字GrPix!patternListRange表示一个工作表的名字,所以你应该可以通过input来删除它

 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 

Update

选项1
一个手动的方法来删除使用R1C1腐败的名字(我记得JKP在另一个论坛,他有代码做这个,但他不准备免费提供)

  1. select工具,选项,然后单击常规选项卡。
  2. 单击“R1C1参考样式”旁边的checkbox,以更改当前设置。
  3. 按OK。
  4. Excel将提示您更改包含非法字符的任何名称(在所有打开的工作簿中)的名称。
  5. select插入,名称,定义删除新重命名的名称。
  6. 使用“工具”,“选项”,“常规”,将R1C1引用样式设置为您喜欢的方式。

选项2
克里斯·内尔森(Chris Neilsen)在任何机会上都发表了删除Excel(2007/2010)中的编程性损坏的范围名称(包含空格)

但是,这里有一个可能的select:将工作簿另存为.xlsm您应该得到一个抱怨无效名称的对话框,其中包含重命名选项和“全部确定”button。 一旦保存,closures并重新打开文件,另存为.xls,你应该很好去

Initial Post
下载姓名经理 ,这是Jan Karel Pieterse和Charles Williams为pipe理姓名而引人注目的插件

它会处理名称

  • 现在错误了,因为范围已被删除(您的问题),
  • 链接到其他工作簿,
  • 现在已经腐败了

另外它会将全局名称转换为本地表名,反之亦然

在这里输入图像说明

这里有两个解决scheme可以帮助其他人寻找这个主题,但是这些仍然不能解决我自己的特定的工作簿。

我还在寻找。

这是来自Aaron Blood并显示了由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