实例变量一定要用对象引用来赋值吗
1个回答
展开全部
Dim [WithEvents] varname[([subscripts])] [As [New] type] [, [WithEvents] varname[([subscripts])] [As [New] type]]
以上是dim语句的语法,其中new关键字的解释:
可选的。可隐式地创建对象的关键字。如果使用 New 来声明对象变量,则在第一次引用该变量时将新建该对象的实例,因此不必使用 Set 语句来给该对象引用赋值。New 关键字不能声明任何内部数据类型的变量,以及从属对象的实例,也不能与 WithEvents 一起使用。
看过解释再来看你的两个语句:
1、dim xl as new …
此时,VBA提示的内容是你将实例化的对象集合供你选择,效果是创建xl变量,不仅定义变量类别为xxx,而且将它进行实例化,即创建并分配内存把地址赋值给xl这个变量。比如你在工程---引用中把ActiveX Data Objects 2.8 Libray选中,那么你再使用这句语句时,你会发现ADODB已经在你的选择之中。其实这就是前期绑定。
2、dim xl as excel…
此时,VBA提示的内容和前一语句有变化,其实在EXCEL中的VBA,你不需要标识EXCEL,效果一样,也就是说,dim sl as …之后的提示内容和有excel提示内容一致,因为是在默认的EXCEL application之中。效果是创建xl变量,但这时候并没有把这个变量xl进行实际的分配出内存并载入堆栈,这个时候这个变量xl还是未使用的,只是个指向空地址的无用变量。这样的语句需要通过SET语句来实现后期绑定。
最后,对于运行效果来说没什么必要去较真研究区别,因为通过相应的语句,效果完全一样,只是在内存和运行方式上的差别。
以上是dim语句的语法,其中new关键字的解释:
可选的。可隐式地创建对象的关键字。如果使用 New 来声明对象变量,则在第一次引用该变量时将新建该对象的实例,因此不必使用 Set 语句来给该对象引用赋值。New 关键字不能声明任何内部数据类型的变量,以及从属对象的实例,也不能与 WithEvents 一起使用。
看过解释再来看你的两个语句:
1、dim xl as new …
此时,VBA提示的内容是你将实例化的对象集合供你选择,效果是创建xl变量,不仅定义变量类别为xxx,而且将它进行实例化,即创建并分配内存把地址赋值给xl这个变量。比如你在工程---引用中把ActiveX Data Objects 2.8 Libray选中,那么你再使用这句语句时,你会发现ADODB已经在你的选择之中。其实这就是前期绑定。
2、dim xl as excel…
此时,VBA提示的内容和前一语句有变化,其实在EXCEL中的VBA,你不需要标识EXCEL,效果一样,也就是说,dim sl as …之后的提示内容和有excel提示内容一致,因为是在默认的EXCEL application之中。效果是创建xl变量,但这时候并没有把这个变量xl进行实际的分配出内存并载入堆栈,这个时候这个变量xl还是未使用的,只是个指向空地址的无用变量。这样的语句需要通过SET语句来实现后期绑定。
最后,对于运行效果来说没什么必要去较真研究区别,因为通过相应的语句,效果完全一样,只是在内存和运行方式上的差别。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询