nat*_*ork 3 excel vba dictionary excel-vba
使用早期绑定和Microsoft Scripting Runtime Library创建字典对象时,看起来有两个相同的类型名称用于同一事物:
Dim dict as Dictionary
Set dict = New Dictionary
Run Code Online (Sandbox Code Playgroud)
和
Dim dict as Scripting.Dictionary
Set dict = new Scripting.Dictionary
Run Code Online (Sandbox Code Playgroud)
似乎做同样的事情(至少到目前为止).
我看到了这个资源As Scripting.Dictionary使用的语法,我看到了这个(非常好的)资源使用的语法,但我没有看到任何地方的比较.关于字典的MSDN文档要么是文字笑话,要么与VBA没有明确相关.As Dictionary
我不明白为什么我应该做额外的打字只是为了让我的函数声明更加拥挤,如果我可以使用As Dictionary,但我已经了解到VBA中看起来像它们相同的一些东西实际上可以有微妙但显着的差异(Application.InputBoxvs .InputBox例如).
这些之间是否真的没有区别,或者我应该注意哪些微妙的差异?
我不明白为什么我应该做额外的打字只是为了让我的功能声明更加拥挤[...]
它被称为完全限定类型.
当你这样做:
Dim foo As Range
Run Code Online (Sandbox Code Playgroud)
在引用对话框中,Range按优先级顺序确定的类型以非常特定的顺序解析:

如果公开Range类型的最顶层类型库是Excel类型库,那么Range代表Excel.Range.
如果您的意思是Word.Range,那么您就有一个错误,并且完全限定您声明的类型可以避免这些错误.
该Scripting库公开了一个Dictionary类.因此,当您引用Scripting类型库并执行此操作时:
Dim foo As Dictionary
Run Code Online (Sandbox Code Playgroud)
您有权期望要解析的类型Scripting.Dictionary.但是如果你添加一个类模块并命名它Dictionary,突然所有这些非限定声明现在都引用了这个自定义类,因为在查看外部引用之前,VBA类型解析将始终优先考虑当前项目中定义的类型.
当然你可以称之为"额外打字".只要知道这两种方法都有利有弊.
Scripting.Dictionary为适用于Mac 的便携式Dictionary实现.经验法则,编程不是关于编写代码.这是关于阅读代码.编写易于阅读的代码,而不是快速编写的代码.