Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
vba应用程序字用作工作簿的前缀_Vba - Fatal编程技术网

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
函数是不可量化错误的来源,因为程序员假定了sheet
ActiveSheet
是什么

Cells(2, 2) = 42
这里也一样。
范围
单元格
的非限定用法是对活动工作表的隐式引用,它们是一种瘟疫。避开它们。使用这些功能的代码通常还具有SelectActivate——这是一种灾难的配方,许多初学者认为这是“正确的方法”,因为宏录制的代码像糖果一样使用它


避免对活动工作表的隐式引用,并避免对活动工作簿的隐式引用。不过,对活动应用程序的隐式引用可能还可以。有点懒,但很好。

应用程序
是可选的,通常省略,对代码没有影响。非常感谢您提供了如此详尽的答案。太棒了。我学到了很多。