首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rng.RefersToRange.Parent.Name与rng.Parent.Name的区别

rng.RefersToRange.Parent.Name与rng.Parent.Name的区别
EN

Stack Overflow用户
提问于 2021-09-07 13:22:33
回答 1查看 67关注 0票数 0

我需要遍历工作簿的命名区域,检查它们是否在特定的工作表中,然后对其执行某些操作。我找到了一个建议,可以使用下面这样的方法:

代码语言:javascript
复制
Dim ws As Worksheet, rng As Name
Set ws = somews
For Each rng In ThisWorkbook.Names
    If rng.RefersToRange.Parent.Name = somews.Name Then 
        'do stuff
    End If
Next rng 

在一开始,它运行得很好。现在我有个问题了。其他人也在使用这个工作簿,我不知道他们做了什么。工作簿有一个带有命名区域的新工作表,这些区域与我在somews中的一些区域相同,但它们引用了一些外部源。我猜他们是在处理工作簿之间的事情。“我的范围”的作用域是整个工作簿,而那些新范围的作用域仅适用于该新工作表。我知道这会发生,这就是为什么我需要这个代码。

这段代码现在崩溃了。因为如果rng是form,那么rng.RefersToRange.Parent.Name仍然返回我的工作表的名称,而不是新工作表的名称。因此,If语句被执行,但范围错误。但是,如果我使用rng.Parent.Name,我会得到正确的名称。

这里的区别是什么?我应该什么时候使用一个,什么时候使用另一个?有没有更好的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-07 13:50:32

.RefersToRange不是Range对象的成员。它是Name对象的成员。

.RefersToRange对象是访问与Name对象关联的Range对象的方式。拥有Range对象后,.Parent属性将返回该范围所属的Worksheet对象。.Name属性将返回工作表的名称。

因此,如果rng是一个Name对象,rng.RefersToRange.Parent.Name将返回包含与该名称关联的区域的工作表的名称。

另一方面,rng.Parent.Name不会遍历范围,因此不太明确它返回的是哪个名称。.Parent属性应用于Name对象,该对象可以引用工作表或工作簿。因此,根据创建Name对象时定义作用域的方式,.Parent.Name将返回单个工作表或工作簿的名称。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69089038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档