填充集合VBA MS Access - 参考问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了填充集合VBA MS Access - 参考问题相关的知识,希望对你有一定的参考价值。
在MS Access中填充VBA中的集合时出现问题。
这是我的代码:
Private Sub loadInfo()
Dim sql As String
sql = "SELECT * FROM table2';"
Set db = CurrentDb
Set rs = db.OpenRecordset(sql)
With rs
.MoveFirst
While rs.EOF = False
Dim person As New person
Dim idToString As String
idToString = rs.Fields("ID").value
person.setFirstName (rs.Fields("first_name").value)
person.setLastName (rs.Fields("last_name").value)
people.Add person, idToString
.MoveNext
Wend
End With
End Sub
该集合在类模块的顶部被声明为初始化。我可以添加项目就好了。然而,在Sub的末尾,我最终得到了一个具有适当数量的对象的集合(无论我在Recordset中有多少),但它们都具有相同的firstName和lastName。
现在,我认为每次“when”循环“循环”时,它内部的变量都会超出范围,从而变为空。在这种情况下,情况似乎并非如此。每当它回到person.setFirstName
时,该集合中已经存在的项目的firstName
将变为新行的当前firstName
。 lastName
也是如此。
这让我相信person
不会在每次循环进行时创建,给我一组类似的条目,除了它们的键是唯一的。
关于如何让循环执行它的任何想法?
答案
集合是键值配对列表。它不能有多个维度。
尝试使用用户定义的类型:
在模块声明中......
Public Type Person
FirstName As String
LastName As String
End Type
在表格声明中......
Dim typPerson() As Person
然后像这样使用......
ReDim typPerson(0 To rs.RecordCount - 1) As Person
Dim i As Integer
Do While Not rs.EOF
With typPerson(i)
.FirstName = rs!FirstName
.LastName = rs!LastName
End With
i = i + 1
rs.MoveNext
Loop
另一答案
在你的子loadinfo()中,在“.MoveNext”之前插入一行:“Set Person = Nothing”。如果不这样做,则整个时间都会将相同的项目添加到集合中。 HTH
以上是关于填充集合VBA MS Access - 参考问题的主要内容,如果未能解决你的问题,请参考以下文章
在列表框 ms-access 2013 VBA 中将多个不同的字段作为列表项返回
将 VBA 用于 MS Access 2000 文本框的控制源