首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在VBA中使用字典会给我的代码带来任何缺陷吗?

在VBA中使用字典会给我的代码带来任何缺陷吗?
EN

Stack Overflow用户
提问于 2015-03-12 13:36:43
回答 1查看 1.2K关注 0票数 2

我想知道在VBA中使用字典是否会给我的代码带来任何缺陷?类似于兼容性问题,因为它不是由VBA原生的。

我不是编程专家,但我习惯于Python及其字典。现在我正在学习VBA,因为我需要自动化一些岩土结构的设计(使用excel)和绘图(AutoCAD)。

我发现它们可以通过设置对MS脚本运行时的引用在VBA中使用。我应该对使用它们有什么顾虑吗?比如windows或office的未来版本中的兼容性问题?

EN

回答 1

Stack Overflow用户

发布于 2016-08-02 08:10:28

你的问题很笼统,我试着用这种方式回答.

在任何语言中使用任何对象类时,需要考虑两件事,即使用对象类的方式可能会带来缺点:

  • 您使用的对象是原生于该语言,还是通用/通用的OS对象?-在本例中,Scripting.Dictionary对象位于OS级别,而不是VBA/Excel级别。这使得它在代码中跨windows版本时更加通用,并且更稳定、更快。底层代码的执行是在OS /已编写的级别,而不是Excel/VBA未编译的级别。唯一的缺点是在完全不同的操作系统(如Mac )上运行代码,正如上面Rory所指出的那样。
  • 在内存中如何使用对象和如何分配?-人们可以就此写一些书,但只需说明如何在内存中分配对象空间就足够了。随着您添加字典,字典的大小也会增加,因此会增加内存分配(对于非常大的数据集来说,这可能会更慢);但是,尽管集合可能更快,但字典实际上比Collection或Array更适合使用。
  • 延迟与早期绑定--早期绑定是在Tools -> References中对dll的引用进行勾选的地方,这样就可以显示类对象的Intelli文本,这是很好的,它在启动时绑定dll,缺点是当您移动到同一操作系统上的不同系统时,可能不会出现相同版本的dll,并且会导致代码中断。另一方面,当您在运行时创建对象的一个实例时,Late Binding会在操作系统注册表中找到当前可用的dll,这是因为它在不同的平台上更兼容,但是您不会在运行时使用Intelli文本和绑定(虽然这并不是什么缺点)。

一些值得注意的事情

  • 字典存储对象以及指向内存中对象的指针,这意味着如果在字典中存储了自己的类,并且继续处理类(即在运行时更新参数值),那么字典中的类也会发生变化,除非您开始处理new类。
  • 要在VBA中优化您的字典,只需记住(这不是必要的,但它有助于并且是很好的实践),告诉字典如何评估关键。即
代码语言:javascript
复制
Set MyDictionary = New Dictionary
MyDictionary.CompareMode = <TextCompare|BinaryCompare|DatabaseCompare>`

总之,在存储信息时,字典是最好的对象,这些信息可能被排序,也可能在大小和类型上未定义。

下面是一些讨论字典与其他存储类型的文章。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29011284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档