删除分配给不同工作簿的所有命名范围

我在创build的工具中有一个“Save Inputs”macros,它将复制主input表以便稍后保存值。 该macros删除原始工作表的注释和其他不必要的部分。 该工具本身有一堆范围名称,这些名称与表单一起被复制。 我试图从保存的input表中删除所有的,但遇到一个错误。

Sub SaveProgramData() Dim SheetCopy As Worksheet Dim BookCopy As Workbook Dim nm As Name Set Analyzer = ThisWorkbook.Worksheets("Program Dashboard") Analyzer.copy Set SheetCopy = ActiveWorkbook.Worksheets(1) 'only way to address copy of a sheet created in new wkbk (i think) Set BookCopy = SheetCopy.Parent With SheetCopy 'remove comments, buttons, data validation, do some formatting, etc. End With For Each nm In BookCopy.Names nm.Delete 'this results in a runtime error saying the name I entered is not valid Next End Sub 

我很困惑,因为我不想input一个名字,只是删除它们。 我也打开另一种方法复制不会保留名称的工作表。

编辑:请参阅下面的评论,问题是大多数的名字被分配到原始工作簿中的范围。 通过向If语句添加附加条件来解决:

 For Each nm In BookCopy.Names If InStr(1, nm.RefersTo, SheetCopy.Name) > 1 Or InStr(1, nm.RefersTo, ThisWorkbook.Name) > 1 Then 'check for names scoped to copied sheet, or original workbook nm.Delete End If Next nm 

你永远不会初始化Namesvariables,所以它不知道要循环通过什么。

试试这个:

创build以下Sub:

 Sub RemoveNamesFromSheet() Dim nm As Name For Each nm In ActiveWorkbook.Names If InStr(1, nm.RefersTo, ActiveSheet.Name) > 1 Then nm.Delete End If Next nm End Sub 

然后简单地用RemoveNamesFromSheetreplace你的循环

希望这个窍门!

我认为你的最后一个for循环应该for nm in BookCopy.Names