VBA 字典参考

RDA*_*RDA 2 excel vba dictionary reference

我不是专业程序员,但相当精通 VBA。我目前正在编写一个程序来分析大型数据库。当我发现数据库中需要进一步分析和潜在纠正的区域时,我想要的方法是在具有共同结构的多个词典中收集必要的数据。

虽然我可以通过早期绑定声明字典,但我需要一种方法来使用变量名引用每个字典,然后我可以用它来创建一个循环来快速分析我收集的所有信息。理想情况下,我想将字典命名为 A1、A2、A3 等,然后创建一个循环,在其中递增名称的数字部分,因为每个字典中的所有数据都以相同的方式分析/纠正。

虽然我知道间接引用不能在标准 VBA 中使用,但可以对每个字典使用对象变量。然而,对象变量本身似乎不具有变量结构的灵活性。这对于像 WorkSheets 这样的一些对象来说似乎是可能的,其中变量名称可以在 WorkSheets 后面的括号中定义(即 WorkSheets("A1")),但对于字典、集合、数组列表或任何其他类型的存储机制来说似乎不可能可能会使用。

我可以通过创建嵌套字典和一些拼凑的键名称来完成我想做的事情。我有一些数据,对于相同的键值需要不同的字典项。因此我需要创建同一密钥的不同“版本”。不用说,虽然这种方法可行,但如果我可以循环遍历名称,分析就会简单得多。

希望我充分描述了我的问题。我在尝试做的事情上是否完全不走运,或者有人知道如何实现这一目标?非常感谢!

ash*_*awg 7

在我最终了解VBA 字典(和集合)之前,我也拥有多年的 VBA 经验。我不完全清楚你的问题,因此这可能无法直接解决你的问题,但我一直在寻找借口来传递我在这两个主题上发现(并且我经常引用)的优秀资源:

\n\n
\n

只是为了让我不会发布仅链接的答案,这里是摘录:

\n

VBA 词典常见任务备忘单:

\n

早期绑定

\n
\n

库/参考(早期绑定)
\n \n\xe2\x80\x82\xe2\x80\x82\xe2\x80\x82 (使用VBE 中的->添加)Microsoft Scripting Runtime
ToolsReferences

\n

声明(早期绑定)
\n Dim dict As Scripting.Dictionary

\n

创建(早期绑定)
\n Set dict = New Scripting.Dictionary

\n
\n
\n

后期绑定

\n
\n

声明(后期绑定)
\n Dim dict As Object

\n

创建(后期绑定)
\n Set dict = CreateObject("Scripting.Dictionary")

\n
\n
\n

添加/更改/获取

\n
\n

添加项目(密钥不得已存在)
\n dict.Add Key, Value
\n例如 dict.Add "Apples", 50

\n

更改键处的值。如果 key 不存在则自动添加。
\n dict(Key) = Value
\n例如 dict("Oranges") = 60

\n

检查密钥是否存在
\n dict.Exists(Key)
\n例如 If dict.Exists("Apples") Then

\n

获取项目数
\n dict.Count

\n


使用键\n Value = dict(Key)
\n从字典中获取值,例如 appleCount = dict("Apples")

\n
\n
\n

消除

\n
\n

删除项目
\n dict.Remove Key
\n例如 dict.Remove "Apples"

\n

删除所有项目
\n dict.RemoveAll

\n
\n
\n

枚举

\n
\n

循环遍历所有项目 ( For..Eachloop)
\n Dim key As Variant
\n For Each key In dict.Keys
\n Debug.Print key, dict(key)
\n Next key

\n

循环遍历所有项目(For..Next循环 -早期绑定)
\n Dim i As Long
\n For i = 0 To dict.Count - 1
\n Debug.Print dict.Keys(i),
\n dict.Items(i)
\n Next i

\n
\n
\n

区分大小写

\n
\n

区分大小写(字典必须为空)。
\ndict.CompareMode = vbBinaryCompare

\n

使键不区分大小写(字典必须为空)。
\ndict.CompareMode = vbTextCompare

\n
\n

(更多信息来源 Paul Kelly Excel Macro Mastery

\n