删除分配给不同工作簿的所有命名范围
我在创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
你永远不会初始化Names
variables,所以它不知道要循环通过什么。
试试这个:
创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
然后简单地用RemoveNamesFromSheet
replace你的循环
希望这个窍门!
我认为你的最后一个for
循环应该for nm in BookCopy.Names