Hallo,
eine Tabelle mit ca. 4500 Sätzen und ca. 35 Bereichen.
Ich möchte die jeweiligen Sätze der Bereiche in Excel wegschreiben.
Das funktioniert soweit wenn ich die Bereiche vorher statisch in ein Array schreibe.
Nun möchte ich aber dieses Array aus der Tabelle selber füllen
SELECT liste.bereich
FROM liste
GROUP BY liste.bereich;
liefert mir ja alle "bereich" einmalig, dieses Ergebnis soll nun die Grundlage für den Export darstellen. Über eine Schleife oder so.
Ich habe bereits verschiedenes probiert, es gibt ja div. Hinweise im Netz. Jedoch bringt mich das nicht wirklich weiter. Irgendwas blicke ich da noch nicht :-(
Hier mal mein nicht funktionierender Code: (angepasst auf die o. g. Abrage:
' ab hier alle Daten exportieren
' -------------------------------------
'Dim rs As DAO.Recordset
'Dim cKstWert As String
' Set dbs = CurrentDb
' strSQLKst = "SELECT liste.bereich " & _
' "FROM liste " & _
' "GROUP BY liste.bereich;"
' Set rs = dbs.OpenRecordset(strSQLKst)
' Do Until rs.EOF = True
' ?????
' cKstWert = rs.GetRows(, , "PartNo")
' rs.MoveNext
' ?????
' Loop
für jede Hilfe dankbar
HDS
Hallo,
Du kannst doch die Abfrage direkt exportieren, wozu hier noch VBA.
Und wenn doch VBA verwende die TransferSpreadsheet Methode zum Export einer gespeicherten Abfrage direkt in ein Excel Arbeitsblatt.
Ein Array halte ich hier für komplett überflüssig.
Statt dem GROUP BY lieber SELECT DISTINCT benutzen.
Die Größe eines Arrays muß folgendermassen festgelegt werden:
Dim arrKst() as String
Dim i as integer
Redim arrKst(rs.RecordCount)
Do until rs.eof
arrKst(i) = rs!Bereich
i = i + 1
rs.movenext
loop
Dim vArr As Variant
Dim lNum As Long
...
Set rs = dbs.OpenRecordset(strSQLKst, dbOpenSnapshot)
With rs
If Not .EOF Then
.MoveLast
lCount = .RecordCount
.MoveFirst
vArr = .GetRows(lCount) ' DAO-GetRows benötigt DS-Anzahl
.Close
End If
End With
GetRows liefert allerdings ein transponiertes Array.
Tipp: Ein Recordset kann man mittels CopyFromRecordset direkt in ein Excelsheet kopieren.
Hallo Wurliwurm,
das waren die entscheidenden Infos. Es funktioniert nun.
Die grundsätzliche Vorgehensweise war mir eigentlich klar. Das Problem lag/liegt im nicht wissen wie das Objekt korrekt angesprochen wird. Mal gibt es rs.xxx dann wieder rs!xxx usw. Gibt es da erhellende Texte, möglichst in deutsch?
Danke für die Mithilfe an alle.
HDS
Hallo,
vielleicht bringt dies:
http://www.donkarl.com/?FAQ6.3
etwas Klarheit ins Dunkel.