我有一个excel模板,由我从同事那里收到的表格填充。 我收到的每张工作表都包含大约12个命名范围,这些范围都具有相同的名称。每个名称都以“flags”开头。
我在stackoverflow上发现了另一个问题,该问题提供了一个删除名称不等于给定名称的名称范围的解决方案: loop through names and delete those not matching specified pattern
我使用此解决方案创建自己的代码。 我要删除的名称(因为它们使我的文件非常慢)都以“flags”开头。 因此我使用了
left(myname.namelocal, 5)
用于查找工作簿中以“flags”开头并删除它的每个名称。
但是,此代码不起作用。执行代码时不会删除名称。
我不明白为什么它不起作用。我在一个小文件上尝试了类似的代码来测试代码。它工作正常。
唯一的区别是测试文件没有密码保护。这就是我添加到代码中以确保代码可以删除名称的内容。
Sub deletenames()
'verwijderd alle naam-bereiken waarvan de naam begint met flags uit het verwerkingsbestand.
Dim ws As Worksheet
Dim myName As Name
For Each ws In ThisWorkbook.Worksheets
ws.Unprotect ("TM")
Next ws
For Each myName In ThisWorkbook.Names
If Left(myName.NameLocal, 5) = "flags" Then myName.Delete
Next
End Sub
我该怎么做才能使这段代码有效?
答案 0 :(得分:0)
问题很可能是Excel允许特定于工作表的范围和工作簿范围的命名范围。由于您已经提到所有工作表都被复制在一起,我怀疑命名范围与工作表相关联。
修改强>
特定于工作表的命名范围具有名称Sheet!Range
,因此您的检查必须考虑工作表前缀。您的评论中将名称与Like
进行比较的解决方案是可以的:
If myName.NameLocal Like "*!flags*" Then myName.Delete