Excel精英培训网

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

[已解决]NEW的理解(之二)

[复制链接]
发表于 2010-5-28 11:47 | 显示全部楼层 |阅读模式

Sub test()
    Dim a As New Workbook
    MsgBox a.Name
End Sub

  • 按NEW的帮助:“... 如果使用 New 来声明对象变量,则在第一次引用该变量时将新建该对象的实例 ...”,那么,a就被指定为一个实例了
  • 但F8,发现msgbox执行前后,a依旧(值nothing,数据类型workbook)。那就说,第一次引用a时a并没被实例化?
  •  

一边是帮助,一边是事实 ................ 当MsgBox a.Name时,这句里的a,到底被没被实例化啊[em06]

 

PS:另,还有个小问题:应如何注释这2句?谢谢!

Dim a As New Workbook
Dim a As Workbook

最佳答案
2010-5-28 12:50

New 关键字不能声明任何内部数据类型的变量,以及从属对象的实例,也不能与 WithEvents 一起使用。

这里的WorkBook是一个从属对象,所谓从属对象我的理解是依赖于某一个对象而存在的对象,其本身不能单独存在。

显然,WorkBook只有依赖于Excel.Application才能存在,就是Application的从属对象。这样的理由也很充分,定义了WorkBook显然要给他一个Application来依附才有意义。这个WorkBook如果被创建了是依赖于哪个Application呢?系统无法指定,说实话,系统也分不清到底是启用Word.Application还是Excel.Application,所以这样的从属对象是不能简单通过New来创建实例的。

[此贴子已经被作者于2010-5-28 12:50:53编辑过]
发表于 2010-5-28 12:26 | 显示全部楼层

new 进行实例化,我理解是针对非excel VBA内置对象的,workbook本身就是vba的对象,还实例化干啥。

就象你生长在一个面包王国里,还有建造一个面包机的必要?

[此贴子已经被作者于2010-5-28 12:26:11编辑过]
回复

使用道具 举报

发表于 2010-5-28 12:35 | 显示全部楼层

兰版有比喻有些生动形象!

在EXCEL倒真是没有这个必要!

在VB中引用excel,倒可以试试!

 

[em01]
回复

使用道具 举报

发表于 2010-5-28 12:50 | 显示全部楼层    本楼为最佳答案   

New 关键字不能声明任何内部数据类型的变量,以及从属对象的实例,也不能与 WithEvents 一起使用。

这里的WorkBook是一个从属对象,所谓从属对象我的理解是依赖于某一个对象而存在的对象,其本身不能单独存在。

显然,WorkBook只有依赖于Excel.Application才能存在,就是Application的从属对象。这样的理由也很充分,定义了WorkBook显然要给他一个Application来依附才有意义。这个WorkBook如果被创建了是依赖于哪个Application呢?系统无法指定,说实话,系统也分不清到底是启用Word.Application还是Excel.Application,所以这样的从属对象是不能简单通过New来创建实例的。

[此贴子已经被作者于2010-5-28 12:50:53编辑过]
回复

使用道具 举报

发表于 2010-5-28 12:50 | 显示全部楼层

[em06][em06][em06]天书
回复

使用道具 举报

发表于 2010-5-28 13:28 | 显示全部楼层

QUOTE:
以下是引用amulee在2010-5-28 12:50:00的发言:

New 关键字不能声明任何内部数据类型的变量,以及从属对象的实例,也不能与 WithEvents 一起使用。

这里的WorkBook是一个从属对象,所谓从属对象我的理解是依赖于某一个对象而存在的对象,其本身不能单独存在。

显然,WorkBook只有依赖于Excel.Application才能存在,就是Application的从属对象。这样的理由也很充分,定义了WorkBook显然要给他一个Application来依附才有意义。这个WorkBook如果被创建了是依赖于哪个Application呢?系统无法指定,说实话,系统也分不清到底是启用Word.Application还是Excel.Application,所以这样的从属对象是不能简单通过New来创建实例的。


[em17][em17]
回复

使用道具 举报

发表于 2010-5-28 13:28 | 显示全部楼层

先学习.

回复

使用道具 举报

发表于 2010-5-28 13:30 | 显示全部楼层

爱疯有一段时间是不是隐居了。
回复

使用道具 举报

发表于 2010-5-28 14:07 | 显示全部楼层

学习

学习

在学习

回复

使用道具 举报

 楼主| 发表于 2010-5-28 16:24 | 显示全部楼层

谢谢兰版、大家!

以下是NEW在Dim中的描述:

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

按句号,我把这段描述切成四段。如果要用小例子来表达2、3、4的其含义,我举不出,也说不清它们的含义。

 

如果workbook不需要实例化,或者因为workbook属于从属对象,而不允许被实例化。那么当我们敲入dim a as new 后,为什么提示列表里会有workbook呢?就像,我们去面包店里买面包,有奶油面包、豆沙面包 ....,但商品栏中不会出现鲜肉大包、牛肉大饼 .... 的道理一样,不是吗?

4楼涉及第4段,我不懂:

  • 任何内部数据类型的变量
  • 从属对象
  • WithEvents 一起使用

谢谢阿木对从属对象做了一段描述,可是应怎样判断,是从属对象、还是非从属对象?

 

PS:2、3、4段,如能用小例子加以说明,就好了。[em04]

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-30 06:08 , Processed in 0.519602 second(s), 7 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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