删除范围名称的所有实例

时间:2013-11-12 19:08:43

标签: excel excel-vba vba

假设我有一个包含多个工作表的工作簿。在工作表范围和工作簿范围内,有许多名称为Name1的范围。我想编写一个遍历工作簿的宏来删除Name1的所有实例。

例如,我打开名称管理器,我看到:

Name1, refers to: =Sheet1!A1, scope: Sheet1<br>
Name1, refers to: =Sheet2!D3, scope: Sheet2<br>
Name1, refers to: =Sheet1!A1, scope: Workbook

我想删除所有Name1 s

现在,Names("Name1").Delete在工作簿级别上不起作用。我认为它只关注全局范围Name1。有没有办法处理与特定名称对应的名称集合?最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

以下宏从所有打开的工作簿中删除Name1的所有实例

Sub deleteName()
    Dim wb As Workbook
    For Each wb In Application.Workbooks
        Dim i As Integer
        For i = wb.Names.Count To 1 Step -1
            If wb.Names(i).Name Like "*Name1" Then wb.Names(i).Delete
        Next i
    Next wb
End Sub

请注意,我们需要在名称集合中向后循环。这是因为如果我们尝试For Each nName in wb.Names / If nName.Name Like "*Name1" Then nName.Delete / Next,Excel / VBA会提供意外结果,例如Error 424 Object Required。我不确定为什么会出现这种情况。