从该范围内的单元格获取范围名称,.Name 似乎不起作用

Getting range name from cell within that range, .Name doesn't seem to be working

我想要做的是从该范围内的单元格中获取范围名称。我环顾四周,似乎每个人都建议使用 .Name 或 .Name.Name,但是当我尝试使用 .Name 和 .Name.Name 时,它们似乎都不起作用,因为我收到 object/application 定义的错误.

我设置了一个展开sheet,因此有几个范围,每个范围都以一个单元格为首,该单元格下方的所有单元格都在同一范围内。我最初只是使用 header 单元格的 .Value ,但这会产生一些问题。我的程序做了很多事情,其中​​之一是创建一个单独的 sheet,其中只有 sheet 上的单个范围数据,并且它的名称与范围名称相同。但是,由于我不能命名一个 sheet 超过 30 个字符(而且我不能在范围名称中使用空格或除下划线以外的特殊字符这一事实开始使得很难直观地阅读 header 单元格说)我一直在尝试将范围命名为 "Umbrella term" 基本上就像 header 单元格是 "Project Management something/something (something)..." 我可以将范围命名为 ProjMgmt 因为它更短但是它有问题,因为 header 单元格的值和范围名称不相同。 header 单元格是一个合并单元格,顺便说一句,如果这很重要,并且这些范围名称已由名称管理器手动分配,我正在使用 excel 2010

编辑:附带问题:当您使用名称管理器手动添加名称时,它不会将它们添加到 workbook.Names 或应该去的任何地方吗?似乎 workbook.Names 除了 sheet names

之外没有填充任何东西

这是我遇到问题的代码。这是在一个循环内,所以 <> OrgName 用于进入新范围

If TempP.Value <> OrgName And TempP.Value <> "" Then
   OrgName = TempP.Value
...rest of code that works

我想尝试这样的事情

If TempP.Name <> OrgName And TempP.Value <> "" Then
   OrgName = TempP.Name

我还有一个 InRange 函数,它可以确定一个单元格是否在我从其他地方获得的我可能能够使用的给定范围内

Function InRange(Range1 As Range, Range2 As Range) As Boolean
    Dim InterSectRange As Range
    Set InterSectRange = Application.Intersect(Range1, Range2)
    InRange = Not InterSectRange Is Nothing
    Set InterSectRange = Nothing
End Function

您可以像这样将它与 InRange 函数一起使用...

Dim ThisName As Name
For Each ThisName In ActiveWorkbook.Names
    If InRange(TempP, ThisName.RefersToRange) And TempP.Value <> "" Then
        Set OrgName = ThisName
    End If
Next

ThisName 将显示 Sheet 名称,但 ThisName.Name 将包含名称管理器中显示的范围名称。因此,您只需更深入一层即可查看您添加的名称。