【问题标题】:how to delete named ranges containing "flags"如何删除包含“标志”的命名范围
【发布时间】:2014-05-23 07:51:50
【问题描述】:

我有一个 Excel 模板,里面填满了我从同事那里收到的添加表格。 我收到的每张表都包含大约 12 个命名范围,它们都具有相同的名称。每个名称都以“标志”开头。

我在 stackoverflow 上发现了另一个问题,该问题提供了删除名称不等于给定名称的名称范围的解决方案: loop through names and delete those not matching specified pattern

我使用这个解决方案来创建我自己的代码。 我要删除的名称(因为它们使我的文件非常慢)都以“标志”开头。 因此,我使用了

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

我该怎么做才能使这段代码正常工作?

【问题讨论】:

    标签: vba excel names


    【解决方案1】:

    问题很可能是 Excel 允许特定工作表和工作簿范围的命名范围。由于您提到所有工作表都是一起复制的,因此我怀疑命名范围与工作表相关联。

    编辑: 特定于工作表的命名范围具有名称Sheet!Range,因此您的检查必须考虑工作表前缀。在您的评论中将名称与Like 进行比较的解决方案是可以的:

    If myName.NameLocal Like "*!flags*" Then myName.Delete
    

    【讨论】:

    • 当我更改我的代码并使 ik 显示一个包含工作簿中每个名称的 msgbox 时,我得到的名称类似于“工作表名称”!flags10_filterdatabase。因此,我认为我应该更改代码以在范围名称中找到工作“标志”,而不是查看开头。我可以使用“喜欢”吗?
    • 这段代码对我有用:If myName.NameLocal Like "*" & "flags" & "*" Then myName.Delete
    猜你喜欢
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多