理查德有一本他已经使用了一段时间的工作簿,里面有很多名字(命名范围,命名公式等)。他想知道是否有一种简单的方法来查找根本不使用的名称,因为他想摆脱这些名称。

没有内置的方法可以摆脱这些未使用的名称。但是,您可以创建一个宏来为您解决问题。通过使用Find方法找出哪些名称具有可以“找到”的引用,最容易做到这一点。如果找不到引用,则该名称未使用。

Sub RidOfNames()

Dim myName As Name     Dim fdMsg As String

On Error Resume Next     fdMsg = ""

For Each myName In Names         If Cells.Find(What:=myName.Name, _           After:=ActiveCell, _           LookIn:=xlFormulas, _           LookAt:=xlPart, _           SearchOrder:=xlByRows, _           SearchDirection:=xlNext, _           MatchCase:=False, _           SearchFormat:=False).Activate = False Then             fdMsg = fdMsg & myName.Name & vbCr             ActiveWorkbook.Names(myName.Name).Delete         End If     Next myName     If fdMsg = "" Then         MsgBox "No unused names found in the workbook"

Else         MsgBox "Names Deleted:" & vbCr & fdMsg     End If End Sub

宏逐步遍历Names集合的所有元素,并搜索每个名称。如果找不到该名称,则删除该名称。宏完成后,它将显示一个消息框,其中列出了从工作簿中删除的名称。

但是,RidOfNames宏存在问题。它不会检查所有可能使用的名称。例如,它无法确定是否在宏中引用了名称,或者它们是否在工作簿中的其他工作表(包括隐藏的工作表)上使用。它还不会检查是否在条件格式设置规则或图表,下拉列表和其他对象中使用了特定名称。即使存在缺陷,RidOfNames仍可以在没有其他宏(除了此宏)的简单工作簿中处理奇迹,并且这些工作簿的大多数数据都包含在单个工作表中。

如果您不想创建自己的宏,则可以选择使用Jan Karel Pieterse的免费加载项。名为“名称管理器”的加载项使您(猜测什么?)比使用本机Excel更好地管理名称。它提供的功能之一是能够删除不再需要的名称。您可以在这里找到加载项:

http://www.jkp-ads.com/OfficeMarketPlaceNM-EN.asp

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(10998)适用于Microsoft Excel 2007、2010和2013。您可以在以下版本的旧版Excel菜单界面中找到该技巧的版本:“ link:/ excel-Finding_Unused_Names [查找未使用的名称]”。