vba应用程序字用作工作簿的前缀
有人能解释一下写vba应用程序字用作工作簿的前缀,vba,Vba,有人能解释一下写应用程序.工作簿.工作表()的意义吗。。。不只是工作簿.工作表(),而忽略应用程序 它对工作簿对象施加了哪些附加限制?简短回答:无 详细回答:这要看情况 通过完全限定工作簿,您就完全清楚了工作簿指的是Excel.Application.Workbooks。如果您有一个名为工作簿(具有PredeclaredId=True属性)的类模块,则非限定的工作簿将引用该类模块,并且如果该类模块没有返回工作簿对象的项默认索引器属性,它实际上会阻止此代码编译: Debug.Print Workb
应用程序.工作簿.工作表()
的意义吗。。。不只是工作簿.工作表()
,而忽略应用程序
它对工作簿
对象施加了哪些附加限制?简短回答:无
详细回答:这要看情况
通过完全限定工作簿
,您就完全清楚了工作簿
指的是Excel.Application.Workbooks
。如果您有一个名为工作簿
(具有PredeclaredId=True
属性)的类模块,则非限定的工作簿
将引用该类模块,并且如果该类模块没有返回工作簿
对象的项
默认索引器属性,它实际上会阻止此代码编译:
Debug.Print Workbooks(1).Worksheets(1).Name
如果没有名为工作簿
的类模块,则VBA会将上述内容解析为应用程序.工作簿
所以,在这种情况下,这并不重要 情况并非总是如此-以以下代码为例:
Range("F12") = 42
这指的是Application.ActiveSheet.Range
,它会咬你的屁股。不合格的Range
函数是不可量化错误的来源,因为程序员假定了sheetActiveSheet
是什么
Cells(2, 2) = 42
这里也一样。范围
和单元格
的非限定用法是对活动工作表的隐式引用,它们是一种瘟疫。避开它们。使用这些功能的代码通常还具有Select
和Activate
——这是一种灾难的配方,许多初学者认为这是“正确的方法”,因为宏录制的代码像糖果一样使用它
避免对活动工作表的隐式引用,并避免对活动工作簿的隐式引用。不过,对活动应用程序的隐式引用可能还可以。有点懒,但很好。
应用程序
是可选的,通常省略,对代码没有影响。非常感谢您提供了如此详尽的答案。太棒了。我学到了很多。