Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 6722|回复: 13

[已解决]怎样理解关键字NEW的用法

[复制链接]
发表于 2010-2-23 18:02 | 显示全部楼层 |阅读模式

可选的。可隐式地创建对象的关键字。如果使用 New 来声明对象变量,则在第一次引用该变量时将新建该对象的实例,因此不必使用 Set 语句来给该对象引用赋值。New 关键字不能声明任何内部数据类型的变量,以及从属对象的实例,也不能与 WithEvents 一起使用。

 

帮助老这样,我也知道它对,但有时越读越读不出什么来 ....  跟没看一样。对此,可否用各位的理解解释下?

好来学习,谢谢!

最佳答案
2010-2-24 14:29

New之后有列表的。。。。

注意,New之后就新建一个对象的实例

这个实例是个具体的概念,你New一个Range,这个Range要放在什么地方吧,放在哪里都不合适吧,所以不让你New。

 楼主| 发表于 2010-2-24 11:01 | 显示全部楼层

“。。。。不必使用 Set 语句。。。。

请问:不必是什么意思?谢谢!

[em11]
回复

使用道具 举报

发表于 2010-2-24 11:39 | 显示全部楼层

帮助要看完整。

如果定义对象变量时没有使用 New 关键字,则在使用该变量之前,必须使用 Set 语句将该引用对象的变量赋值为一个已有对象。在该变量被赋值之前,所声明的对象变量有一个特定值 Nothing,这个值表示该变量没有指向任一个对象实例。

回复

使用道具 举报

发表于 2010-2-24 11:45 | 显示全部楼层

前绑定与后绑定的差别吧,前绑定用NEW,不必用Set语句,后绑定不用new,必须用Set语句后才能使用。
回复

使用道具 举报

发表于 2010-2-24 11:46 | 显示全部楼层

另外,请看以下实例。创建一个类模块取名为Mycls,添加代码如下:
Public Name$
Private Sub Class_Initialize()
 Name = "AA"
End Sub
然后,添加一个模块,添加代码如下:
Sub Test1()
    Dim clsNew As New MyCls
    MsgBox clsNew.Name
    MsgBox clsNew.Name
End Sub
Sub Test2()
    Dim clsNew As MyCls
    MsgBox clsNew.Name
End Sub
分别运行Test1和Test2,有什么区别?分步执行看看。
用了New后,在第一次使用对象变量时会进行初始化,不用的则不会。
回复

使用道具 举报

 楼主| 发表于 2010-2-24 13:46 | 显示全部楼层

谢谢阿木,吕布!

4楼示例,相当于设置mycls的一个属性name。name属性在mycls初始化时,将被执行。

但是模块中,由于test2的dim语句无new,因此出错。截止到此,4楼示例相当于对这句话:“如果使用 New 来声明对象变量,则在第一次引用该变量时将新建该对象的实例,因此不必使用 Set 语句来给该对象引用赋值。”有了一面的解释。

但另一面:“当....时,必须使用set语句来给该对象引用赋值”情况时呢?我无法从4楼示例,或其他的回复,给予解释。

PS:class,在这里的意思是什么呀?

[此贴子已经被作者于2010-2-24 13:49:13编辑过]
回复

使用道具 举报

发表于 2010-2-24 13:54 | 显示全部楼层

QUOTE:
以下是引用爱疯在2010-2-24 13:46:00的发言:

谢谢阿木,吕布!

4楼示例,相当于设置mycls的一个属性name。name属性在mycls初始化时,将被执行。

但是模块中,由于test2的dim语句无new,因此出错。截止到此,4楼示例相当于对这句话:“如果使用 New 来声明对象变量,则在第一次引用该变量时将新建该对象的实例,因此不必使用 Set 语句来给该对象引用赋值。”有了一面的解释。

但另一面:“当....时,必须使用set语句来给该对象引用赋值”情况时呢?我无法从4楼示例,或其他的回复,给予解释。

PS:class,在这里的意思是什么呀?


其实这句话的意思就是,要么,你就New新建一个,让系统初始化一个。要么你就用现有的指定一个对象给变量。否则,系统不知道对谁进行操作。

Test2中,由于没有用New,则这个变量没有具体的对象所指,所以没有具体的Name属性来对应。

回复

使用道具 举报

发表于 2010-2-24 13:54 | 显示全部楼层

补充:Class就是类的意思。
回复

使用道具 举报

 楼主| 发表于 2010-2-24 13:57 | 显示全部楼层

QUOTE:
以下是引用amulee在2010-2-24 13:54:00的发言:
补充:Class就是类的意思。

这样呀,不可能忘了[em02]

回复

使用道具 举报

 楼主| 发表于 2010-2-24 14:05 | 显示全部楼层

QUOTE:
以下是引用amulee在2010-2-24 13:54:00的发言:

其实这句话的意思就是,要么,你就New新建一个,让系统初始化一个。要么你就用现有的指定一个对象给变量。否则,系统不知道对谁进行操作。

Test2中,由于没有用New,则这个变量没有具体的对象所指,所以没有具体的Name属性来对应。

  噢,这样说,就是要么NEW一下,要么SET下,对么?

以前我们常常这样声明:

Sub aa()
    Dim rng As Range
    Set rng = [A1:B3]
End Sub

现在来看,这算是set一下了。那么同样完成这个操作,应该还可以采取另种方式:new

那。。。。怎么new一下呢[em09]

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-17 06:24 , Processed in 0.384323 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表