在VBA中使用字典会给我的代码带来什么缺点?

我想知道如果在VBA中使用字典可以给我的代码带来任何缺点? 像兼容性问题一样,因为它不是来自VBA本地的

我不是编程方面的专家,但我习惯Python和它的字典。 现在我正在学习VBA,因为我需要自动化一些岩土结构的devise(使用Excel)和绘图(AutoCAD)。

我发现他们可以通过设置对MS Scripting运行时的引用在VBA中使用。 我是否应该对使用它们有任何顾虑? 像未来版本的Windows或Office兼容性问题?

你的问题是非常笼统的,我会尽力回答这个问题….

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

  • 您使用的是本地语言的对象还是普通的/通用的操作系统对象? – 在这种情况下,Scripting.Dictionary对象位于操作系统级别,而不是VBA / Excel级别。 这使得在代码中跨越Windows版本工作时更通用,更稳定和更快。 底层代码的执行在OS / complied级别,而不是在Excel / VBA未编译级别。 唯一的缺点是在Mac上完全不同的操作系统上运行代码,如上面Rory所述。
  • 在内存中如何使用和分配对象? – 人们可以在这里写书,但是足以说出对象是如何在记忆中分配空间的。 字典的大小随着你的添加而增长,所以它增加了内存分配(对于非常大的数据集,这可能会变慢)。 然而,尽pipe集合可能会更快,但是尽pipe如此,字典实际上比集合或数组更适合使用。
  • 早期绑定 – 早期绑定是在Tools -> References中勾选了对dll的Tools -> References它允许类对象的Intelli-text显示哪个是好的,它在启动时绑定dll,缺点是当你移动到同一个操作系统上的不同系统时,同一版本的dll可能不会出现,并且会破坏你的代码。 后期绑定另一方面是当你在运行时创build对象的实例,认为说set MyDictionary = CreateObject("Scripting.Dictionary")这将find当前可用的操作系统位于操作系统作为链接在操作系统registry中,亲是在不同的平台上更兼容,但是你不会有Intelli-Text和绑定将发生在运行时(虽然几乎没有缺点)。

有些事情要注意

  • 一个字典存储对象以及指向内存中对象的指针,这意味着如果你有一个你自己的类存储在字典中,并继续在类上工作(即在运行时更新参数值),那么类字典也会改变,除非你开始一个newclass级的工作。

  • 为了在VBA中优化你的字典,只要记住(这是没有必要的,但它有帮助,是一个很好的做法)告诉字典如何评估的关键。 即

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

总之,虽然字典是最好的对象来使用时,可能会或可能不会被sorting的信息,可能是未定义的大小和types。

以下是一些讨论字典与其他存储types的post。