在VBA中使用Dictionaries会给我的代码带来任何缺点吗?

时间:2015-03-12 13:36:44

标签: excel vba excel-vba dictionary

我想知道在VBA中使用Dictionaries是否会给我的代码带来任何缺点?与兼容性问题一样,因为它不是VBA本地的

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

我发现可以通过设置对MS Scripting运行时的引用来在VBA中使用它们。我对使用它们有任何疑虑吗?像未来版本的Windows或办公室中的兼容性问题一样?

1 个答案:

答案 0 :(得分:2)

我的问题很普遍,我会尝试这样回答......

在任何语言中使用任何对象类时,要考虑的两件事情可能会带来一些弊端:

  • 您使用该语言的原生对象或者它是一般/通用操作系统对象? - 在这种情况下,Scripting.Dictionary对象在操作系统级别而不是VBA / Excel级别。这使得它在代码中跨Windows版本工作时更通用,更稳定,更快。底层代码的执行是在OS / complied级别而不是在Excel / VBA未编译级别。唯一的缺点是在完全不同的操作系统上运行代码,如上面Rory所述的那样。
  • 如何使用对象并在内存中分配? - 人们可以写这本书,但足以说明对象如何在内存中分配空间。字典确实会随着你添加它而增大,所以它会增加内存分配(对于非常大的数据集来说可能会更慢);但是,虽然集合可能更快,但是说字典实际上比集合或数组更适合使用。
  • 晚期与早期绑定 - 早期绑定是您在Tools -> References中找到dll引用的位置。这允许类的Intelli-text显示哪些对象很好并且它在启动时绑定了dll,缺点是当您在同一操作系统上移动到不同的系统时,可能不会出现相同版本的dll并且会使代码中断。另一方面,后期绑定是在运行时创建对象实例时认为set MyDictionary = CreateObject("Scripting.Dictionary")这将找到操作系统中链接的当前可用的操作系统dll ,专业人士在不同平台上的兼容性更高,但是你不会拥有Intelli-Text,并且会在运行时进行绑定(虽然几乎没有缺点)。

需要注意的事项

  • 字典存储对象以及指向内存中对象的指针,这意味着如果你有一个自己的类存储在字典中并继续处理类(即在运行时更新参数值)时间)然后字典中的类也会改变,除非你开始研究new类。

  • 要在VBA中优化您的字典,请记住(这不是必要的,但这有助于并且是一种好的做法)告诉字典如何评估密钥。即

Set MyDictionary = New Dictionary MyDictionary.CompareMode = <TextCompare|BinaryCompare|DatabaseCompare>

总之,虽然字典是存储可能或可能没有排序的信息时使用的最佳对象,并且可能在大小和类型上未定义。

以下是一些讨论词典与其他存储类型的帖子。