假设我有一个包含多个工作表的工作簿。在工作表范围和工作簿范围内,有许多名称为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
。有没有办法处理与特定名称对应的名称集合?最好的方法是什么?
答案 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
。我不确定为什么会出现这种情况。