【发布时间】:2015-04-03 00:57:50
【问题描述】:
我正在尝试学习如何使用使用键的字典集合。我有一个由特殊字符分隔的文本文件。使用 VBA 宏记录器,我学会了如何删除连续的分隔符以及排列列以防止文本文件在不同的地方带有标题。
数据包含申请人信息:
Name | Date | State | University | Age
Ann | 2015-01-14 | NY | Boston | 18
Bob | 2015-02-11 | MA | Stanford | 17
为了这个示例,数据存储在工作表上,在工作表 1 上。从第 1 行第 1 列的标题开始。
我创建了一个名为申请人的用户定义对象:
Type Applicant
Name as String
DateApp as Date
State as String
University as String
Age as Double
End Type
我想创建一个数据字典“申请人”集合来存储申请人的每个实例。我在想这样的事情:
Public Sub add_applicant(prsPerson as Applicant)
有没有办法做到这一点?我了解使用 for/each 循环 .add 到集合的基础知识,但我只看到将单个条目添加到字典集合中。我想对此进行扩展并从用户定义的对象中添加数据类型的组件。我希望申请人集合的单个实例包含恰好一个申请人行的数据。
我会做这样的事情吗?
Dim prsPerson As Applicant
Set prsPerson = New Applicant
With prsPerson
.Name = "Ann"
.Age = 18
.State = "NY"
.Date = "2015-01-14"
.University = "Boston"
End With
Applicants.Add Item:=prsPerson
如何创建一个遍历范围块的 for 循环,并使用子程序 add_applicant(prsPerson as Apply)?
如何为此添加密钥?我希望密钥由名称组成。然而,Ann 不止一次出现在数据文件中,因为她可以申请不同的学校。这是允许的吗?因为我还想计算安申请了多少次等等。
【问题讨论】:
-
您可以考虑更改您的类型,以便
University是一个数组 - 您不需要创建同一个人的多个版本,因为他们已经申请了 >1 所学校。另请注意,您在这里使用的是 Type,而不是 Class,因此您的申请人仍然是“值类型”,在这种情况下您不使用 Set .
标签: vba excel excel-2010