【问题标题】:VBA difference between ShapeRange(1) and ShapeRange.Item(1)ShapeRange(1) 和 ShapeRange.Item(1) 之间的 VBA 区别
【发布时间】:2021-09-24 06:51:54
【问题描述】:

担心在测试期间我没有想到的情况下代码会崩溃,因此想了解这两种方法之间的区别,它们似乎完成了完全相同的事情:

ActiveWindow.Selection.ShapeRange(1)
ActiveWindow.Selection.ShapeRange.Item(1)

上下文是:识别活动光标位置所在的形状,或者如果选择了整个形状,则选择项目中的第一个形状(即,如果形状内有活动光标,则返回该形状;如果用户有选择多个形状,它返回第一个形状)。

看MSDN:

对于第一个选项,您可以在括号中添加索引以访问所选形状中的任何形状编号https://docs.microsoft.com/en-us/office/vba/api/powerpoint.shaperange

但是查看“Item”,根据定义,“从指定的 ShapeRange 集合返回单个 Shape 对象”似乎做了完全相同的事情。 https://docs.microsoft.com/en-us/office/vba/api/powerpoint.shaperange.item

有什么区别,在什么情况下会导致出错?

TIA

【问题讨论】:

标签: vba powerpoint shapes


【解决方案1】:

Tim Williams 发布的链接很好地解释了正在发生的事情 - 值得一读。

回答您的具体问题:

  1. 这两行代码没有区别。由于.Item 是集合对象的默认属性,ShapeRange(1) 的作用与ShapeRange.Item(1) 相同。编码风格是个人喜好问题,但大多数 VBA 开发人员避免隐式引用。话虽如此,我想说我们大多数人在引用集合时都会忽略.Item,例如ThisWorkbook.Worksheets("Sheet1")。如果您有兴趣,我确实发现 .Item 对于包装在 With ... End With 块中的代码很有用:

    With ThisWorkbook.Worksheets
        .Add After:=.Item(.Count)
    End With
    
  2. 不,您的代码不会失败。它可能失败的唯一原因是,如果 Microsoft 更改了 Collection 对象的默认属性,并且您更有可能在您的彩票号码出现的同一天被闪电击中时被鲨鱼吃掉。

【讨论】:

  • 非常感谢安比!
猜你喜欢
  • 2022-10-01
  • 1970-01-01
  • 2020-04-01
  • 1970-01-01
  • 2019-04-27
  • 2018-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多