Wbk中已删除的名称仍然存在,并引用不存在的位置,请慢用Excel
在referesto属性的VBA帮助中,他们给出了在Wkb中列出所有名称的示例,以便您可以按原样运行Wbk中已删除的名称仍然存在,并引用不存在的位置,请慢用Excel,excel,names,vba,Excel,Names,Vba,在referesto属性的VBA帮助中,他们给出了在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.
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的链接项变灰。更新
选择1
我记得JKP在另一个论坛上说,他有代码来做这件事,但他不准备免费提供
选择工具、选项,然后单击“常规”选项卡。
单击R1C1参照样式旁边的复选框,以便更改当前设置。
按OK。
Excel将提示您更改所有打开工作簿中任何名称的名称!包含非法字符的。
选择“插入”、“名称”、“定义”以删除新重命名的名称。
使用工具、选项和常规将R1C1参照样式设置回您喜欢的方式。
选择2
Chris Neilsen在
但是,这里有一个可能的选择:将工作簿另存为.xlsm
您应该会看到一个对话框,其中包含一个选项,抱怨名称无效
要重命名,请单击“全部确定”按钮。保存后,关闭并重新打开
文件,另存为.xls,您就可以开始了
初始职位
下载Jan Karel Pieterse和Charles Williams为管理姓名而编写的杰出插件
它将处理那些
现在,由于范围已被删除,您的问题出现了错误,
链接到其他工作簿,
他们现在腐败了
此外,它还将全局名称转换为本地图纸名称,反之亦然,以此类推
-最新答覆-
由于您知道无效范围的名称,但在名称管理器中看不到它们,因此可以尝试从VBA即时窗口手动删除它们。你给GrPix起的名字!patternListRange表示工作表名称,因此您可以通过键入来删除它
ActiveWorkbook.Names("GrPix!patternListRange").Delete
或
在即时窗口中
原始答案
您是否尝试过通过代码删除无效名称?i、 e
For Each nm In ActiveWorkbook.Names
If InStr(nm.RefersTo, "OldFileName.xls") > 0 Then
nm.Delete
End If
Next nm
这里还有两个解决方案可能适用于其他搜索此主题的人,但它们仍然无法修复我自己的特定工作簿 我还在找 这来自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
这是Help女士发来的
' 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
谢谢brettdj,我已经使用名称管理器很多年了,并且依靠它来保持代码中旧名称的干净,但是这次它不起作用。我开始认为wkb可能已经损坏,而名称管理器并不是专门用来处理这个问题的。以下是其中一个伪造名称的引用示例:='\\.psf\MacHD上共享的\Documents and Settings\All Users\Documents\Gridder-on-All-Users文档[NewGridder142.xls]地标'$P$2 0 0\\.psf\在MacHD\Documents and Settings\All Users\Documents\Gridder上共享在All Users文档[NewGridder142.xls]上这就是为什么我问这些名称存储在哪里,这样我就可以手动将它们从Excel外部清除。如果我能找到的话。+1代表recco的姓名经理。我完全同意。这是一个很棒的程序,大多数人在搜索这个主题时都会发现它解决了他们的问题。只是不是我的:+1代表姓名经理@罗伊:如果可能的话,我可以看一下档案吗?如果你愿意,你可以上传到wikisend.com或skydrive,并在这里共享链接。@Roy我已经更新了我的帖子。按照Sid的要求查看您的文件会很好这是一个冗长、迂回且可能难看的解决方案,但是您是否尝试过将所有数据迁移到新工作簿中?如果wkb以某种方式腐败,这可能会解决它。天哪,我真的对这个解决方案寄予厚望。它看起来应该可以工作,但不,它找不到任何问题名称。@罗伊,但ShowNames仍在找到它们?是的,有4个,都是合法名称,它们的引用模式基本上与上面在PC和Mac之间来回引用的模式相同。psf代表Parallels共享文件夹。删除隐藏名称代码怎么不起作用?它是否从未显示包含需要删除的名称的消息框?删除过程失败了吗?它运行时没有错误,但名称没有被删除吗?它运行时没有错误,也没有找到任何隐藏的名称。我想我的四个名字都隐藏得太好了。这里还有另一个例子,1是一个名字的上面,指的是不应该存在的名字。名字:GrPix!patternListRange引用:='\\.psf\MacHD上共享的\Documents and Settings\All Users\Documents\Gridder on All Users文档[NewGridder142.xls]地标'$Z$2 0 0\\.psf\在MacHD上共享\Documents and Settings\All Users\Documents\Gridder在All Users文档[NewGridder142.xls]上共享,并键入ActiveWorkbook.namegrpix!patternListRange。删除或删除图纸
即时窗口中的GrPix.NamespatternListRange.Delete不起作用?这毫无意义。这两个过程For循环的唯一区别在于,一个使用变量,另一个使用Name对象变量。那应该没什么区别。我不得不附和其他人说的话。如果不看实际的文件,我想我不能提供更多的帮助。是的!!!成功了。我不知道为什么其他方法找不到这些名称,但我使用了你的第二个建议,只是更改了名称并运行了4次,最后它清除了它们。谢谢你坚持住,我差点放弃了。如果你能以回答的形式重复一遍,我会核对一下。
' 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