【发布时间】:2015-09-17 01:25:21
【问题描述】:
我找到了一个旧方法http://www.techbookreport.com/tutorials/vba_dictionary2.html 在 VBA 的字典中执行字典,但在脚本库中的 Excel 2013 修改中,我无法使嵌套以相同的方式工作。
还有吗?
Sub dict()
Dim ws1 As Worksheet: Set ws1 = Sheets("BM")
Dim family_dict As New Scripting.Dictionary
Dim bm_dict As New Scripting.Dictionary
Dim family As String, bm As String
Dim i
Dim ws1_range As Range
Dim rng1 As Range
With ws1
Set ws1_range = .Range(Cells(2, 1).Address & ":" & Cells(.Cells(.Rows.Count, 1).End(xlUp).Row, 1).Address)
End With
For Each rng1 In ws1_range
family = ws1.Cells(rng1.Row, 1)
bm = ws1.Cells(rng1.Row, 2)
If family_dict.Exists(family) Then
Set bm_dict = family_dict(family)("scripting.dictionary")
If bm_dict.Exists(bm) Then
Else
bm_dict.Add bm, Empty
End If
Else
family_dict.Add family, Empty
Set bm_dict = family_dict(family)("scripting.dictionary")
If bm_dict.Exists(bm) Then
Else
bm_dict.Add bm, Empty
End If
End If
For Each i In family_dict.Keys: Debug.Print i: Next
For Each i In bm_dict.Keys: Debug.Print i: Next
For Each i In bm_dict.Items: Debug.Print i: Next
Debug.Print bm_dict.Count
Next
End Sub
【问题讨论】:
-
vba 和 vbscript 是旧的、稳定的技术。如果 2013 年字典的语义有任何变化,我会感到惊讶。
-
我已经看到了一些所谓的字典例程字典,我通常对为什么不使用带有连接值作为项目的单个字典(例如,像 Atom 提要)感到震惊。 \
-
您不能使用此语法:
Set bm_dict = family_dict(family)("scripting.dictionary")。您必须使用与链接中相同的方法:Set myDictionary = New Dictionary然后将其添加为父字典的项目。我也在this 回答中做了一个工作示例,您可以根据您的数据进行调整