【问题标题】:What is the difference between 'Range.Parent' and 'Range.Worksheet' in VBA?VBA 中的“Range.Parent”和“Range.Worksheet”有什么区别?
【发布时间】:2018-05-18 00:37:00
【问题描述】:

.Parent.Worksheet 属性与范围一起使用时,似乎引用了 Range 所在的同一个工作表对象。

例如,这两行返回相同的值:

Debug.Print Selection.Parent.Name
Debug.Print Selection.Worksheet.Name

这两者有区别吗?每种方法有优缺点吗?

【问题讨论】:

  • 您必须通过 .Parent 测试 Worksheet object 原生的所有方法和属性来证明这一点,但我认为它们是可互换的;即 .Parent 具有它所指的所有属性和方法。
  • 对于很多使用Selection.Parent的操作(循环)会更慢,因为Excel需要确定Selection属于哪个集合:ChartsNamesSheets,@ 987654331@,TableStylesWindowsWorksheetsXmlNamespaces。使用Selection.Worksheet,它直接进入Worksheets 集合
  • 我能想到的唯一区别是当您使用With 时,IntelliSense 无法获取任何对象的父对象。各种对象 top Parent 是 Application,包括它自己很有趣。

标签: vba excel properties worksheet


【解决方案1】:

除非您可以保证Selection 始终是工作表的一部分,否则不会说Selection.Parent.Name 将产生与Selection.Worksheet.Name 相同的结果。如果它“在”其他类型的对象(例如图表或图形)中,结果可能会大不相同——您需要进行一些测试。

所以,Selection.Worksheet.Name 更准确(并且,正如评论中有人指出的那样,执行速度可能更快)。但是,如果您不能保证 Selection 会引用 Worksheet,它可能会触发错误或产生意外结果。

【讨论】:

  • 如果用户选择 Excel 图表,那么TypeName(Selection) 就是ChartAreaTypeName(Selection.Parent)ChartTypeName(Selection.Parent.Parent)ChartObject 最后,TypeName(Selection.Parent.Parent.Parent)Worksheet
猜你喜欢
  • 2017-04-07
  • 2011-03-05
  • 1970-01-01
  • 2023-02-14
  • 2011-04-21
  • 2011-12-20
  • 1970-01-01
相关资源
最近更新 更多