0

假设我有一个包含多张工作表的工作簿。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

我想删除所有的Name1s

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

4

1 回答 1

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. 我不确定为什么会发生这种行为。

于 2013-11-12T22:50:54.267 回答