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

标签 excel vba dictionary

我想知道在 VBA 中使用字典是否会给我的代码带来任何缺点?就像兼容性问题一样,因为它不是 VBA 原生的

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

我发现通过设置对 MS Scripting 运行时的引用,可以在 VBA 中使用它们。使用它们时我应该有任何顾虑吗?喜欢 future 版本的 Windows 或 Office 中的兼容性问题吗?

最佳答案

你的问题很笼统,我会尝试这样回答......

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

  • 您使用的对象是该语言的原生对象还是一般/通用操作系统对象? - 在这种情况下,Scripting.Dictionary 对象位于操作系统级别,而不是 VBA/Excel 级别。这使得它在代码中跨 Windows 版本工作时更加通用,并且更加稳定和更快。底层代码的执行是在操作系统/已编译级别,而不是在 Excel/VBA 未编译级别。唯一的缺点是在完全不同的操作系统(例如 Mac)上运行代码时,如上面 Rory 所指出的。
  • 如何使用对象并在内存中分配? - 人们可以写这方面的书,但只要说明对象如何在内存中分配空间就足够了。当您添加字典时,字典的大小确实会增加,因此它会增加内存分配(对于非常大的数据集,这可能会更慢);不过话虽如此,字典实际上比集合或数组更适合使用,尽管集合可能更快。
  • 后期绑定(bind)与早期绑定(bind) - 早期绑定(bind)是您在工具 -> 引用中找到对 dll 的引用的位置。显示类对象的智能文本,这很好,它在启动时绑定(bind) dll,缺点是当您移动到同一操作系统上的不同系统时,相同版本的 dll 可能不存在,并且会影响您的代码打破。另一方面,后期绑定(bind)是当您在运行时创建对象的实例时,思想说 set MyDictionary = CreateObject("Scripting.Dictionary") 这会找到当前可用的 dll 位于操作系统注册表中链接的操作系统上,其优点是它在不同平台之间的兼容性更高,但是您不会拥有智能文本,并且绑定(bind)将在运行时发生(尽管这几乎没有缺点)。

一些注意事项

  • 字典在内存中存储对象以及指向对象的指针,这意味着如果您在字典中存储了自己的类并且您继续处理该类(即在运行时更新参数值)时间),那么字典中的类也会发生变化,除非您开始处理类。

  • 要在 VBA 中优化字典,只需记住(这不是必需的,但它有帮助并且是很好的做法)告诉字典如何评估键。即

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

总而言之,在存储可能已排序或未排序且大小和类型可能未定义的信息时,字典是最好使用的对象。

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

关于excel - 在 VBA 中使用字典会给我的代码带来任何缺陷吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29011284/

相关文章:

C# VSTO Excel 自动筛选值和空白

excel - 循环浏览带有合并单元格的vba中excel工作簿的评论

excel - 间接适用于另一张纸上的整列

excel - VBA:如何根据 VBA 中的私钥生成带有 RS256 的签名?

python - 我正在尝试计算 txt 文件中的所有字母,然后按降序显示

ios - 从使用 Mirror 创建的字典中过滤 nil 值

excel - 如何在excel的气泡图中添加数据标签

excel - VBA 将唯一的正则表达式附加到字符串变量

VBA 工作表更改多次运行的代码

Swift:总是从 Firebase 获取最新的项目