首页 > 解决方案 > ShapeRange(1) 和 ShapeRange.Item(1) 之间的 VBA 区别

问题描述

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

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

标签: vbapowerpointshapes

解决方案


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 对象的默认属性,并且在您的彩票号码出现的同一天,您更有可能在被闪电击中时被鲨鱼吃掉。


推荐阅读