如何解决VBA在运行时添加到数组
我试图在运行时根据记录集的结果创建一个int数组。
Do While Not rstSearchResult.EOF
If rstSearchResult(ID) = blah Then
\'Add this Id rstSearchResult(ID) to Array
End If
Call rstSearchResult.MoveNext()
Loop
我需要的是相同的结果,因为这会给我
Array(35588,35589,35595)
解决方法
Dim myIntArray() as Integer
Dim intDimension as Integer
intDimension = 0
Do While Not rstSearchResult.EOF
If rstSearchResult(ID) = blah Then
\'Add this Id rstSearchResult(ID) to Array
REDIM PRESERVE myIntArray(intDimension)
myIntArray(intDimension) = rstSearchResult(ID)
intDimension = intDimension +1
End If
Call rstSearchResult.MoveNext()
Loop
,当我需要从Recordset复制到数组时,将数组ReDim预先设置为您想要的大小要比在循环内将其重新命名要高一些。
Dim myIntArray() as Integer
Dim intDimension as Integer
rstSearchResult.Filter = \"ID = \" & blah
ReDim myIntArray(rstSearchResult.RecordCount - 1)
intDimension = 0
Do Until rstSearchResult.EOF
myIntArray(intDimension) = rstSearchResult!ID
intDimension = intDimension + 1
rstSearchResult.MoveNext
Loop
请注意,要使RecordCount工作,您需要以静态方式打开记录集。
rstSearchResult.Open \"tblSearchResult\",cnn,adOpenStatic
,当我在excel中执行VBA时,我有一个用于数据库访问的类,我有一个将记录集返回到数组的函数。希望以下内容能对您有所帮助。
Public Function RSToArray(ByVal oRS,Optional ByVal iRows,Optional ByVal iStart,Optional ByVal aFieldsArray)
If iRows = 0 Then iRows = adGetRowsRest
If iStart = 0 Then iStart = adBookmarkfirst
RSToArray = \"\" \' return a string so user can check For (IsArray)
If IsObject(oRS) And oRS.State = adStateOpen Then
If Not oRS.BOF And Not oRS.EOF Then
If IsArray(aFieldsArray) Then
RSToArray = oRS.GetRows(iRows,iStart,aFieldsArray)
Else
If iRows <> adGetRowsRest Or iStart <> adBookmarkfirst Then
RSToArray = oRS.GetRows(iRows,iStart)
Else
RSToArray = oRS.GetRows()
End If
End If
End If
End If
End Function
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。