Excel VBA删除单个范围的多个范围名称

Excel VBA删除单个范围的多个范围名称,excel,excel-2010,vba,Excel,Excel 2010,Vba,我已经搜索了几个小时的答案,现在无法再搜索了。我们已经看过很多关于从工作簿或工作表中删除所有范围名称的讨论。但是,我需要从单个范围中删除多个范围名称,同时在同一工作表和/或同一工作簿中单独保留其他范围的其他范围名称。代码可能是这样的吗 Sub Delete_My_Named_Ranges() Dim nName As Name Dim wbk As Workbook Dim Sht As Worksheet Dim rgNm As Range, aCell As Rang

我已经搜索了几个小时的答案,现在无法再搜索了。我们已经看过很多关于从工作簿或工作表中删除所有范围名称的讨论。但是,我需要从单个范围中删除多个范围名称,同时在同一工作表和/或同一工作簿中单独保留其他范围的其他范围名称。代码可能是这样的吗

Sub Delete_My_Named_Ranges()
   Dim nName As Name
   Dim wbk As Workbook
   Dim Sht As Worksheet
   Dim rgNm As Range, aCell As Range

   Set wbk = Workbooks("testRgNmDelete.xlsm")
   Set Sht = wbk.Worksheets("Sheet1")

   Set rgNm = Sht.Range("$A$1")

        For Each nName In ThisWorkbook.Names
            Set aCell = Range(nName)
            If Not Intersect(aCell, rgNm) Is Nothing Then
                nName.Delete
            End If
         Next
  End Sub
好的,上面的代码适用于固定范围($a:$1)。但我需要能够将rgNm设置为变量,而不是固定范围。下面是一个示例,错误现在出现在语句“Set aCell=Range(nName)”上


再次感谢

由于声明后未设置
rgName
,因此出现该错误

这是我对你问题的理解

假设在
Sheet1
中有一个范围
A1:A10
,单元格
A2
有一个名称
NM1
,单元格A5有一个名称
NM2
,单元格D10有一个名称
NM3

您需要一段代码来删除范围
A1:A10
中的名称,即
NM1
NM2
而不是
NM3

如果以上是你想要的,那么试试这个

Option Explicit

Sub Sample()
    Dim rgName As Range, aCell As Range
    Dim nName As Name

    Set rgName = Sheets("Sheet1").Range("A1:A10")

    For Each nName In ThisWorkbook.Names
        Set aCell = Range(nName)
        If Not Intersect(aCell, rgName) Is Nothing Then nName.Delete
    Next
End Sub
如果我误解了你的问题,你可能想重新措辞

跟进


作为一个新的VBA用户,这对我来说是一个非常有用的站点,但是除了这些小注释之外,我完全不知道如何添加到这个站点。请试着想象一下Excel 2010中的名称管理器-在名称管理器中,有10个唯一的名称,全部用于=Sheet1$A一美元。我想要所有这些名字都是关于Sheet1的$将由VBA代码删除的$1。我不想在任何地方删除其他姓名3分钟前的LostInData

根据你的上述评论,试试这个

Option Explicit

Sub Sample()
    Dim nName As Name

    For Each nName In ThisWorkbook.Names
        If nName.RefersTo = "=Sheet1!$A$1" Then nName.Delete
    Next
End Sub

我认为上面给出的解决方案缺少一些东西

要使用range对象引用命名范围的范围,必须使用命名范围的name属性。因此,不是
Set aCell=Range(nName)
,而是
Set aCell=Range(nName.Name)

像这样:

Option Explicit

Sub Sample()
    Dim rgName As Range, aCell As Range
    Dim nName As Name

    Set rgName = Sheets("Sheet1").Range("A1:A10")

    For Each nName In ThisWorkbook.Names
        Set aCell = Range(nName.Name)
        If Not Intersect(aCell, rgName) Is Nothing Then nName.Delete
    Next
End Sub

单元格(或区域)F2包含许多名称,我需要删除所有这些区域名称。我不希望其他区域或单元格的任何名称消失。仅供参考,我使用此范围包含临时列表。每次用户从用户表单中做出不同的选择时,都会重新创建此列表。结果是该范围被多次重命名。请原谅我缺乏创造性的方法来解释这一点,但我需要VBA代码来消除此特定范围的所有名称,同时保持其他范围名称不变。再次感谢!你能举个例子说明你所说的F2单元有很多名字吗?我显然不知道如何使用这个网站。当我点击回车键时,我的文章会被上传,但实际上我只是想创建一个新的段落。不知道如何发布任何示例-是否有我忽略的“如何使用此网站”部分?您可以将屏幕截图上载到任何图像上载网站,然后在此处共享链接。然后我会上传你问题中的图片。作为一个新的VBA用户,这是一个非常有用的网站,但除了这些小注释之外,我完全不知道如何添加到这个网站。请试着想象一下Excel 2010中的名称管理器-在名称管理器中,有10个唯一的名称,全部用于=Sheet1$A一美元。我想要所有这些名字都是关于Sheet1的$将由VBA代码删除的$1。我不想在任何地方删除其他姓名。很高兴能够提供帮助:)@LostInData,你不应该像以前那样更改帖子。你完全改变了你开始时的想法,它可以完全改变任何人提供的所有答案的逻辑。你的问题对其他人也有帮助,即使你一开始就错了。如果你要进行问题的下一步,最好开始新的问题。对不起。我一直在努力想办法使用这个网站。也许对我来说太高级了。我会退学。@LostInData,请不要放弃。分享问题这是你发展技能的最好方式,而且,你无意中帮助了有一天可能有类似问题的人。最后,我们尽最大努力去帮助,因为我们喜欢。
Option Explicit

Sub Sample()
    Dim rgName As Range, aCell As Range
    Dim nName As Name

    Set rgName = Sheets("Sheet1").Range("A1:A10")

    For Each nName In ThisWorkbook.Names
        Set aCell = Range(nName.Name)
        If Not Intersect(aCell, rgName) Is Nothing Then nName.Delete
    Next
End Sub