vba - 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
解决方案
Tim Williams 发布的链接很好地解释了正在发生的事情 - 非常值得一读。
在回答您的具体问题时:
两行代码没有区别。由于
.Item
是集合对象的默认属性,ShapeRange(1)
因此与ShapeRange.Item(1)
. 编码风格是个人喜好问题,但大多数 VBA 开发人员避免隐式引用。话虽如此,我想说我们大多数人.Item
在引用集合时都会忽略,例如ThisWorkbook.Worksheets("Sheet1")
. 如果您有兴趣,我确实发现包装在块.Item
中的代码很有用:With ... End With
With ThisWorkbook.Worksheets .Add After:=.Item(.Count) End With
不,您的代码不会失败。它可能失败的唯一原因是,如果 Microsoft 更改了 Collection 对象的默认属性,并且在您的彩票号码出现的同一天,您更有可能在被闪电击中时被鲨鱼吃掉。
推荐阅读
- c++ - 如何找到大数的斐波那契和?
- php - 在 PHP 同一页面上传递表单值
- laravel - 显示 Laravel 验证错误?
- ios - CocoaPods 找不到 pod "React/Core" 的兼容版本?
- sqlite - 具有持久化能力的 Poco c++/Sqlite
- scala - Scala/SBT:“对象不是包的成员”,但对象在外部库中
- javascript - XSS - innerText 字符串可以是 HTML 元素是否危险:脚本、div 等?
- c# - app.UseMigrationsEndPoint 在 .NET Core Web 应用程序启动类中的作用
- r - 根据另一个数据帧中的信息对数据帧进行分类
- jquery - JSTree 加载延迟加载不适用于我的资源 url,但适用于示例 url