请解释Excel的VBA语句

代码的开头有这么两句:DimdAsNewDictionary以及Setd=CreateObject("Scripting.Dictionary"),结尾有一句Setd=N... 代码的开头有这么两句:Dim d As New Dictionary 以及 Set d = CreateObject("Scripting.Dictionary") ,结尾有一句 Set d = Nothing ,07版可正常运行。但如果换成10版,就必须删掉Dim d As New Dictionary 才能运行,甚至连Set d = Nothing也可删掉(我不知道删此有没有影响)。网上译Scripting为“脚本”、Dictionary为“字典”、Nothing为“没有什么”、CreateObject(不是O前有空格的Create Object)没译出来。请师傅解释一下3句话的含义,以及删后会不会隐藏错误。谢谢! 展开
 我来答
YannRonn
2014-12-20
知道答主
回答量:10
采纳率:0%
帮助的人:3.3万
展开全部
Dim d as New Dictionary,这句话等效于下面两句:
Dim d as Dictionary
Set d = New Dictionary
表示声明了一个Dictionary类型的对象型变量,并且创建了一个Dictionary对象的实例,可以通过d这个变量来操控。
Set d = CreateObject("Scripting.Dictionary"),如果这句话出现在Dim d as New Dictionary后面,那么其实做了两件事。
首先,在Dim d as New Dictionary这句话里面创建的Dictionary对象不再指派到变量d上,至于这个对象现在处境如何,我们完全交给VBA来安排,不管。
其次,通过CreateObject函数创建了一个Scripting类型库下的Dictionary类,然后让d来操控这个类。

需要指出的是,这段代码写的是有问题的。因为在执行了CreateObject函数后,第一句话中创建的Dictionary类完全失去了作用,变成了一个游荡者的幽灵,你没办法重新让这个类绑定到变量上,又没办法完全消除这个类,只能指望着VBA本身来接受这个烂摊子。也就是说,这两句代码导致了多余对象实例的创建。

不过,更复杂的是,你现在有两个版本的Office,就有两个版本的VBA,他们对于这种不符合规范的代码如何处理,我没有了解过,显然,他们的处理方式不一样。

在VBA中,(VB6一样),通常都不建议采用Dim var as New Class的方式,因为很难调试、控制。正规路子是:
Dim var as Class
Set var = New Class

最后那句 Set d = Nothing,表明在内存中释放这个类的实例,这样的话这个被创建并且绑定到d上的类实例就完全清除了,这是写代码的好习惯,甚至说是一种必须,一般不要删除。否则这个实例就又变成了幽灵,只能指望着VBA自己来处理了。

我建议你作如下尝试:
先尝试如下方法:
Dim d as Dictionary
Set d = New Dictionary
如果不行,尝试:
Dim d as Dictionary
Set d= CreateObject("Scripting.Dictionary")
还是不行,尝试:
Dim d as Object
Set d= CreateObject("Scripting.Dictionary")
其中最后一种方法在调试上很麻烦,尤其是当Dictionary出现错误时,不知道具体是什么错误,因此尽量不要使用。
追问
感谢答了这么多,只是我应该选取最需要的东西。见谅!
EXCEL办公实战
2014-12-20 · Excel办公实战函数、技巧、VBA教程
EXCEL办公实战
采纳数:2380 获赞数:23634

向TA提问 私信TA
展开全部
Set d = CreateObject("Scripting.Dictionary") 创建字典对象

和Dim d As New Dictionary 是一样的,但是后者需要绑定对象才可以用

也就是dim 这句可以删除
set d=nothing 这句是清空字典对象!
追问
谢谢解答!
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友733e280
推荐于2016-03-29 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.1万
采纳率:47%
帮助的人:3744万
展开全部
Dim d As New Dictionary
定义一个字典对象变量D,需要加载引用对象,如出错是字典对象没有引用 到原因

以及 Set d = CreateObject("Scripting.Dictionary") ,
定义变量D为字典对象,如没自动引用加载字典对象,并赋空值。

结尾有一句 Set d = Nothing ,

字典用完,清空变量D。如果字典的数据量大,一定要用这个,否则电脑速度下降。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
绿衣人敲门
推荐于2016-02-24 · 知道合伙人软件行家
绿衣人敲门
知道合伙人软件行家
采纳数:18765 获赞数:63775
毕业于西北大学计算机网络技术专业,现在在西安电力学院进行网络推广维护工作!

向TA提问 私信TA
展开全部

 VBA 是基于Visual Basic 发展而来的,它们具有相似的语言结构. 

  1. VB是设计用于创建标准的应用程序,而VBA是使已有的应用程序(EXCEL等)自动化   

  2. VB具有自己的开发环境,而VBA必须寄生于已有的应用程序.   

  3. 3要运行VB开发的应用程序,用户不必安装VB,因为VB开发出的应用程序是可执行文件(*.EXE),而VBA开发的程序必须依赖于它的父应用程序,例如EXCEL.   

  4. 尽管存在这些不同,VBA和VB在结构上仍然十分相似.事实上,如果你已经了解了VB,会发现学习VBA非常快.相应的,学完VBA会给学习VB打下坚实的基础.而且,当学会在EXCEL中用VBA创建解决方案后,即已具备在WORD ACCESS OUTLOOK FOXPRO PROWERPOINT 中用VBA创建解决方案的大部分知识.


已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式