Ich bin neu in VBA, versuchen, ein Outlook-Makro um eine Excel-Tabelle über Microsofts ACE OLEDB Provider zu schreiben. Ich Looping durch die ResultSet
nach einer Abfrage und Speicherung der Ergebnisse in einem Collection
, entlang der Linien der folgenden Möglichkeiten:Hinzufügen von ADODB RecordSet Element zu 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
Mit folgendem test.xlsx
:
Wir bekommen:
1
2, 2
3, 3, 3
4, 4, 4, 4
5, 5, 5, 5, 5
Dies scheint konsistent mit results.Fields.Item("column_name")
zurück eine Referenz, die bei jedem MoveNext
überschrieben wird, und der Verweis ist, was in values
gespeichert ist.
Nicht vertraut mit der Referenz/Wert-Mechanik in VBA, ist diese Vermutung auf dem richtigen Weg, und gibt es eine Möglichkeit, wie ich die Werte speichern kann?
IIRC Ich Referenzierung 'Microsoft ActiveX Data Objects [6.1]' re: [diese Büroräume] (https://technet.microsoft.com/en-us/library/ee692882.aspx). Das Beispiel ist dem Live-Code nicht 100% ig treu, aber ich hatte gehofft, dass das Problem häufig genug war, um das Formular zu erkennen. Danke für den Hinweis auf den 'Ergebnis'-Fehler! – concat
Ich denke, Sie müssen den Code kopieren und dann für Ihre Verwendung bearbeiten. In diesem Artikel gibt es kein ResultSet - dort heißt es auch Recordset. Als einen Punkt der zukünftigen Referenz sind wir nicht hier, um Code zu untersuchen, der nicht einmal selbst getestet wurde. Sobald Sie es in Gang bringen, könnte es besser sein, die Debug Join-Anweisung außerhalb der Schleife zu setzen - aber das ist nur eine große Vermutung im Moment – dbmitch
Fair genug, ich fragte zunächst in Eile. Auf meiner Arbeitsmaschine konnte ich nun das Verhalten mit dem aktualisierten Beispiel reproduzieren. – concat