【发布时间】:2016-10-10 21:38:16
【问题描述】:
我是 VBA 新手,正在尝试通过 Microsoft 的 ACE OLEDB Provider 围绕 Excel 电子表格编写 Outlook 宏。我在查询后遍历ResultSet,并将结果存储在Collection 中,如下所示:
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H1
Sub Test()
Dim conn As New ADODB.Connection
Dim results As New ADODB.Recordset
Dim values As Object
Set values = CreateObject("System.Collections.ArrayList")
conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\Users\me\test.xlsx;" & _
"Extended Properties=""Excel 12.0; HDR=YES;"""
results.Open "SELECT * FROM [Sheet1$]", _
conn, adOpenStatic, adLockOptimistic, adCmdText
Do Until results.EOF
values.Add results.Fields.Item("num")
Debug.Print Join(values.toArray, ", ")
results.MoveNext
Loop
End Sub
以下test.xlsx:
我们得到:
1
2, 2
3, 3, 3
4, 4, 4, 4
5, 5, 5, 5, 5
这似乎与 results.Fields.Item("column_name") 返回一个在每个 MoveNext 处被覆盖的引用一致,并且该引用是存储在 values 中的内容。
对 VBA 中的引用/值机制不太熟悉,这个猜测是否正确,有什么方法可以代替存储值吗?
【问题讨论】:
标签: vba reference oledb adodb recordset