Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wbk中已删除的名称仍然存在,并引用不存在的位置,请慢用Excel_Excel_Names_Vba - Fatal编程技术网

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

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.

在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.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