vba - "As Dictionary"和 "As Scripting.Dictionary"是否等效(对于 VBA 早期绑定(bind))?

标签 vba excel dictionary

使用早期绑定(bind)和 Microsoft 脚本运行时库创建字典对象时,同一事物似乎有 2 个等效的类型名称:

Dim dict as Dictionary
Set dict = New Dictionary

Dim dict as Scripting.Dictionary
Set dict = new Scripting.Dictionary

似乎做了同样的事情(至少到目前为止)。

我看到使用了 As Scripting.Dictionary 语法 by this resource ,我看到使用了 As Dictionary 语法 by this (really great) resource ,但我还没有在任何地方看到比较。关于词典的 MSDN 文档是 a literal joke ,或not explicitly related to VBA .

如果我可以只使用As Dictionary,我不明白为什么我应该做额外的输入,只是为了让我的函数声明更加拥挤,但我了解到VBA中的一些东西看起来像它们是等效的,实际上可能存在细微但显着的差异(例如 Application.InputBoxInputBox)。

这些之间真的没有区别吗,还是有我应该注意的细微差别?

最佳答案

I don't see why I should be doing extra typing just to make my function declarations more crowded [...]

这就是我们所说的完全限定类型(或函数/过程调用,取决于上下文)。当你这样做时:

Dim foo As Range

类型范围以非常特定的顺序进行解析,该顺序由引用对话框中的优先级顺序确定:

Tools/References dialog

如果公开 Range 类型的最顶层类型库是 Excel 类型库,则 Range 代表 Excel .范围.

如果您的意思是 Word.Range,那么您就有一个错误,并且完全限定声明的类型可以防止这种情况发生。

Scripting 库公开了一个 Dictionary 类。因此,当您引用 Scripting 类型库并执行以下操作时:

Dim foo As Dictionary

您有权期望该类型解析为 Scripting.Dictionary。但是,如果您添加一个类模块并将其命名为 Dictionary,突然之间,所有这些不合格的声明都引用了这个自定义类,因为 VBA 类型解析将始终优先考虑当前项目中定义的类型,然后再查看外部引用文献。

两种方法各有利弊:

  • 完全限定类型可以避免引用公开同名类的类型库时出现歧义:它增强了可读性。
  • Not 限定类型可以更轻松地将一个类交换为另一个类,例如将 Scripting.Dictionary 替换为 portable Dictionary implementation可在 Mac 上运行。

根据经验,编程不是编写代码,而是......主要是阅读代码!编写易于阅读的代码,而不是快速编写的代码 - future 的自己稍后会感谢您!

关于vba - "As Dictionary"和 "As Scripting.Dictionary"是否等效(对于 VBA 早期绑定(bind))?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48429138/

相关文章:

excel - 暂时关闭 Excel 备份

string - 如果字符数大于某个值,则截断 Excel 单元格内的字符串

excel - 查找 Countif 排除某些列

python - 如何使用 las2excelbulk 函数创建 python 代码以将用户定义文件夹中的所有 las 文件转换为相应的 excel 文件

python - Python 是否优化了引擎盖下的字典查找?

Excel 宏 : iterate through workbooks and print individual sheets from each

vba - 防止关闭按钮在 MS Access 中保存记录

sql - 从 Excel 运行存储过程

c++ - Cpp/Cli 将 std::map 转换为 .net 字典

c# - 如何将字典的内容写入文本文件?