有人可以解释写Application.Workbooks.Worksheets()
的重点...而不只是Workbooks.Worksheets()
,省略Application
吗?
它对Workbooks
对象施加了哪些额外限制?
答案 0 :(得分:1)
简答:没有。
答案很长:这取决于。
通过完全限定Workbooks
,您完全明确Workbooks
指的是Excel.Application.Workbooks
。如果你有一个名为Workbooks
的类模块(带有PredeclaredId=True
属性),那么一个不合格的Workbooks
将引用该类模块,如果该类模块没有返回Item
对象的Workbook
默认索引器属性,它实际上会阻止编译此代码:
Debug.Print Workbooks(1).Worksheets(1).Name
如果您没有名为Workbooks
的课程模块,则VBA会将上述内容解析为Application.Workbooks
。
所以,在这种情况下,它并不重要。
情况并非总是如此 - 以此代码为例:
Range("F12") = 42
指的是Application.ActiveSheet.Range
,它会在后端咬你。不合格的Range
函数是无法量化的错误的来源,因为程序员正在假设表ActiveSheet
是什么。
Cells(2, 2) = 42
同样在这里。 Range
和Cells
的不合格用法是对活动表的隐式引用,并且它们是瘟疫。避免他们。使用这些代码的代码,通常还包含Select
和Activate
- 灾难的处方,许多初学者认为是#34;正确的方式"因为宏录制的代码使用它就像糖果一样。
避免对活动工作表的隐式引用,并避免对活动工作簿的隐式引用。但是,对活动应用程序的隐式引用可能很好。一点点懒惰,但很好。