vba应用程序单词用作工作簿的前缀

时间:2016-03-29 03:49:14

标签: vba

有人可以解释写Application.Workbooks.Worksheets()的重点...而不只是Workbooks.Worksheets(),省略Application吗?

它对Workbooks对象施加了哪些额外限制?

1 个答案:

答案 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

同样在这里。 RangeCells的不合格用法是对活动表的隐式引用,并且它们是瘟疫。避免他们。使用这些代码的代码,通常还包含SelectActivate - 灾难的处方,许多初学者认为是#34;正确的方式"因为宏录制的代码使用它就像糖果一样。

避免对活动工作表的隐式引用,并避免对活动工作簿的隐式引用。但是,对活动应用程序的隐式引用可能很好。一点点懒惰,但很好。